依赖注入和类继承

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)

您特别要求采用除此方法之外的方法.为什么?

目标是满足基类的要求,而后代类不知道它的任何内容.

这通常是错误的做法.你为什么要这样做?

更新:

根据您之后的注释,您应该使用(并配置您的容器使用)属性注入而不是构造函数注入.这将满足您的所有要求.