名称依赖依赖注入

时间:2013-12-02 16:38:41

标签: c# dependency-injection castle-windsor

对于这两个构造函数:

public SomeClassWithDependency(IValidator<SomeClass> concrete1)
{
    ...
}

public SomeOtherClassWithDependency(IValidator<SomeClass> concrete2)
{
    ...
}

我目前尝试使用此功能:

container.Register(Component.For<IValidator<SomeClass>>().ImplementedBy<Concrete1>().Named("concrete1"));
container.Register(Component.For<IValidator<SomeClass>>().ImplementedBy<Concrete2>().Named("concrete2"));

不幸的是,似乎总是注入Concrete1。有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

注册依赖类时,需要使用DependsOn告诉Windsor注入哪个实例:

container.Register(
    Component
        .For<SomeClassWithDependency>()
        .DependsOn(Dependency.OnComponent<IValidator<SomeClass>, Concrete1>()),
    Component
        .For<SomeOtherClassWithDependency>()
        .DependsOn(Dependency.OnComponent<IValidator<SomeClass>, Concrete2>()));

这确实打破了编程到界面的概念,应该谨慎使用,但有时它是不可避免的。

答案 1 :(得分:1)

您可以使用SubResolver在注册相同类型的多个组件中选择使用与参数名称匹配的名称注册的组件。