У меня есть проблема, которую я не могу решить.Я уверен, что это просто, но я, честно говоря, не могу понять это.У меня есть простой тип, который я повторно использую на нескольких контроллерах.Проблема, с которой я сталкиваюсь, заключается в том, что это ОДИН И ТОТ ЖЕ тип с разными конфигурациями.Мне нужны разные экземпляры этого типа для использования на разных контроллерах.Я изложил это так просто, как только могу подумать, чтобы попытаться объяснить это ...
Рассмотрим следующее:
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»Виндзорский компонент "concrete.two".
Единственная альтернатива, которую я вижу, - НЕ передавать это как параметр и просто инициализировать его в конструкторе вручную.
public FirstController()
{
base.SimpleType = WindsorServiceFactory.Create<ISimpleType>("concrete.one");
}
Есть ли лучший способ?
Заранее спасибо!