当我可以在它继承的类中执行相同的操作时,为什么要在类中设置构造函数来设置基参数

本文关键字:设置 为什么 参数 构造函数 继承 我可以 执行 操作 | 更新日期: 2023-09-27 17:56:05

我有以下代码:

public abstract class ApiBaseController : ApiController
{
    protected IUow Uow { get; set; }
}

和:

public class ContentStatusController : ApiBaseController
{
    public ContentStatusController(IUow uow)
    {
        Uow = uow;
    }
}

有什么理由不能在 ApiBaseController 中对 Uow 的分配(使用 IOC)进行编码吗?

我问的原因是因为我正在尝试做一些类似于 Code Camper 应用程序示例的事情,并且我注意到在该示例中,工作单元分配始终在控制器本身的结构中执行,而不是在 ApiBaseConstructor 中执行。在示例中,我看到这是构造函数中唯一完成的事情。

如果我在基本控制器中进行分配,那么我如何编码,Uow是否仍然需要"保护"才能在从ApiBaseController继承的控制器中可用?

当我可以在它继承的类中执行相同的操作时,为什么要在类中设置构造函数来设置基参数

IOC 容器通过构造函数注入依赖项。如果你想继续使用该机制(一些容器允许例如属性注入,但不是每个人都喜欢这样做),那么你仍然需要在派生类中使用相同的构造函数,将注入的组件向下传递到基类1

像这样:

public abstract class ApiBaseController : ApiController
{
    public ApiBaseController(IUow uow)
    {
        Uow = uow;
    }
    protected IUow Uow { get; private set; }
}
public class ContentStatusController : ApiBaseController
{
    public ContentStatusController(IUow uow) : base(uow) //<-- This is needed
    {
    }
}

1因为类不继承构造函数。