У меня есть проблема, которую я не могу решить. Я уверен, что это просто, но я, честно говоря, не могу понять это. У меня есть простой тип, который я повторно использую на нескольких контроллерах. Проблема, с которой я столкнулся, заключается в том, что это один и тот же тип с разными конфигурациями. Мне нужно, чтобы разные экземпляры этого типа использовались на разных контроллерах. Я упростил это так просто, как только мог, чтобы попытаться объяснить это...
Рассмотрим следующее:
interface ISimpleType
{
string Value { get; }
}
class ConcreteType : ISimpleType
{
private readonly string _value;
public ConcreteType(string value)
{
_value = value;
}
public string Value { get { return _value; } }
}
В моем файле web.config я определил два экземпляра одного типа со своими собственными идентификаторами:
<component id="concrete.one"
service="MyApp.ISimpleType, MyApp"
type="MyApp.ConcreteType, MyApp">
<parameters>
<value>ONE</value>
</parameters>
</component>
<component id="concrete.two"
service="MyApp.ISimpleType, MyApp"
type="MyApp.ConcreteType, MyApp">
<parameters>
<value>TWO</value>
</parameters>
</component>
Теперь на моем контроллере MVC я хочу иметь возможность принимать интерфейс ISimpleType
в качестве параметра, но использовать правильный экземпляр ConcreteType
в зависимости от имени параметра:
public class FirstController : BaseController
{
public FirstController(ISimpleType firstType) : base(firstType) { ... }
}
public class SecondController : BaseController
{
public SecondController(ISimpleType secondType) : base(secondType) { ... }
}
Я хотел бы зарегистрировать все экземпляры ISimpleType с именем "firstType" для использования компонента Windsor "concrete.one" и все экземпляры ISimpleTypes с именем "secondType" для использования компонента Windsor "concrete.two".
Единственная альтернатива, которую я вижу, - это НЕ передавать это как параметр и просто инициализировать его в конструкторе вручную.
public FirstController()
{
base.SimpleType = WindsorServiceFactory.Create<ISimpleType>("concrete.one");
}
Есть ли способ лучше?
Заранее спасибо!