我有一个似乎无法解决的问题。我确信这很简单,但我老实说无法弄明白。我有一个简单的类型,我在多个控制器上重用。我面临的问题是它是具有不同配置的SAME类型。我需要在不同的控制器上使用这种类型的不同实例。我把它简单地愚蠢到尽可能简单地试图解释它......
请考虑以下事项:
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中,我已经使用自己的id定义了两个相同类型的实例:
<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) { ... }
}
我想将名为“firstType”的所有ISimpleType实例注册为使用Windsor组件“concrete.one”,并将所有名为“secondType”的ISimpleTypes注册为使用Windsor组件“concrete.two”。
我能看到的唯一选择是不将它作为参数传递,只需手动在构造函数中初始化它。
public FirstController()
{
base.SimpleType = WindsorServiceFactory.Create<ISimpleType>("concrete.one");
}
有更好的方法吗?
提前致谢!