nki*_*kes 13 c# dependency-injection castle-windsor
我觉得这是我应该已经知道的事情,但我今天并没有解雇所有引擎......
我有一个带有单个ctor的基类,它接受一个接口的实现,因为它是唯一的参数.我正在使用DI框架,并且我的组件注册都已设置好并且工作正常.
当我从这个基类继承时,除非我将值传递给基础构造函数,否则我必须定义一个无参数的ctor,它会绕过DI.
所以现在我有:
public class MyObjectBase
{
IMyRequiredInterface _InterfaceImpl;
public MyObjectBase(IMyRequiredInterface interfaceImpl)
{
_InterfaceImpl = interfaceImpl;
}
...
}
public class AnotherObject : MyObjectBase
{
public AnotherObject()
{
}
...
}
Run Code Online (Sandbox Code Playgroud)
所以,走出大门就失败了.当实例化AnotherObject时,我收到错误,表明没有基类ctor接受0参数.好的,我明白了.但现在我可以选择:修改后代类ctor以获取类似参数并将该值传递给基本ctor,或者连接基类中的ctor链,这会强制我绕过DI并创建具体实现必需的接口并将其作为无参数ctor声明的一部分传递.
目标是满足基类的要求,而后代类不知道它的任何内容.
也许我说这一切都错了,但它让我烦恼.有没有想过更好的方法来处理这个?我觉得我必须要错过一些简单的东西......
yfe*_*lum 18
正确的方法是:
public class AnotherObject : MyObjectBase {
public AnotherObject(IMyRequiredInterface interfaceImpl) :
base(interfaceImpl) {
}
}
Run Code Online (Sandbox Code Playgroud)
您特别要求采用除此方法之外的方法.为什么?
目标是满足基类的要求,而后代类不知道它的任何内容.
这通常是错误的做法.你为什么要这样做?
根据您之后的注释,您应该使用(并配置您的容器使用)属性注入而不是构造函数注入.这将满足您的所有要求.