当我可以在它继承的类中执行相同的操作时,为什么要在类中设置构造函数来设置基参数
本文关键字:设置 为什么 参数 构造函数 继承 我可以 执行 操作 | 更新日期: 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因为类不继承构造函数。