gpt4 book ai didi

c# - 依赖注入(inject)和类继承

转载 作者:可可西里 更新时间:2023-11-01 08:19:55 26 4
gpt4 key购买 nike

我觉得这是我应该已经知道的事情,但我今天并不是在所有引擎上开火......

我有一个带有单个构造函数的基类,它采用接口(interface)的实现作为唯一参数。我使用的是 DI 框架,我的组件注册都已设置好并且工作正常。

当我从这个基类继承时,除非我将一个值传递给基类构造函数,否则我必须定义一个绕过 DI 的无参数构造函数。

所以现在我有:

public class MyObjectBase
{
IMyRequiredInterface _InterfaceImpl;
public MyObjectBase(IMyRequiredInterface interfaceImpl)
{
_InterfaceImpl = interfaceImpl;
}
...
}

public class AnotherObject : MyObjectBase
{
public AnotherObject()
{
}
...
}

因此,一开始就失败了。实例化 AnotherObject 时出现错误,表明没有采用 0 参数的基类 ctor。好的,我明白了。但现在我有一个选择:要么修改后代类 ctor 以采用类似的参数并将该值传递给基类 ctor,要么在基类中连接一个 ctor 链,迫使我绕过 DI 并创建一个具体的实现所需的接口(interface)并将其作为无参数 ctor 声明的一部分传递。

目标是在子类不知道的情况下满足基类的要求。

也许我做错了,但这让我很烦恼。关于更好的处理方法的任何想法?我觉得我必须缺少一些简单的东西......

最佳答案

正确的做法是:

public class AnotherObject : MyObjectBase {
public AnotherObject(IMyRequiredInterface interfaceImpl) :
base(interfaceImpl) {
}
}

您特别要求采用这种方法以外的方法。为什么?

The goal is to meet the requirement of the base class without the descendant classes knowing anything about it.

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

更新:

根据您后来的评论,您可能应该使用(并配置您的容器以使用)属性注入(inject)而不是构造函数注入(inject)。这将满足您的所有要求。

关于c# - 依赖注入(inject)和类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/907746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com