Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 我可以将其他组件传递到Castle Windsor配置中吗?_Dependency Injection_Castle Windsor - Fatal编程技术网

Dependency injection 我可以将其他组件传递到Castle Windsor配置中吗?

Dependency injection 我可以将其他组件传递到Castle Windsor配置中吗?,dependency-injection,castle-windsor,Dependency Injection,Castle Windsor,假设我有一个主组件,我想以一种特定的方式初始化它,我让它的构造函数为此目的使用一个接口。有没有一种方法可以在xml中定义这个接口的实现,并将其作为参数注入到主组件中?像这样: public interface IComponent2 { void DoStuff(); } public class ConcreteCompImpl2 : IComponent2 { IComponent1 _comp; public ConcreteCompImpl2(ICompone

假设我有一个主组件,我想以一种特定的方式初始化它,我让它的构造函数为此目的使用一个接口。有没有一种方法可以在xml中定义这个接口的实现,并将其作为参数注入到主组件中?像这样:

public interface IComponent2 {
    void DoStuff();
}

public class ConcreteCompImpl2 : IComponent2 {

    IComponent1 _comp;
    public ConcreteCompImpl2(IComponent1 comp) {
        _comp = comp;
    }

    public void DoStuff(){
        //do stuff
    }
}



<component id="component1" service="ABC.IComponent1, ABC" type="ABC.ConcreteCompImpl1, ABC" />
<component id="component2" service="ABC.IComponent2, ABC" type="ABC.ConcreteCompImpl2, ABC" >         
    <parameters>
       <component1>???</component1>
    </parameters>
</component>
公共接口IComponent2{
void DoStuff();
}
公共类ConcreteCompImple2:IComponent2{
i组件1_comp;
公共混凝土组件2(IComponent1组件){
_comp=comp;
}
公共空间{
//做事
}
}
???

还是我认为这一切都错了,有一个更简单的方法来实现这一点?我希望能够做的主要事情是配置每当创建IComponent2时,将注入什么类型的IComponent1。谢谢

如果您只有一个具体类实现了
IComponent1
,那么在解析
IComponent2
时,它将自动被注入

如果有多个类实现了
IComponent1
,并且希望每次解析
IComponent2
时都有一个特定的类,则需要指定一个:

container.Register(
用于()的组件
.由()实施
.DependsOn(Dependency.OnComponent())
);
我不完全确定您是否可以在XML配置中指定这一点,但老实说,您应该使用而不是,除非您有非常令人信服的理由使用它。如上链接所述:

在创建Fluent注册API之前,用XML注册组件的能力主要是Windsor早期的遗留问题。它的功能远不如在代码中注册,许多任务只能通过代码来完成

container.Register(
    Component.For<IComponent2>()
             .ImplementedBy<Component2>()
             .DependsOn(Dependency.OnComponent<IComponent1, YourSpecialComponent1>())
);