c# - 当基类中只需要依赖时,在基类中使用属​​性注入(inject)是否合适?

标签 c# dependency-injection inversion-of-control property-injection

例子:

public abstract class BaseControler : Controller
{
    public IUnitOfWork UnitOfWork { get; set; }
}

public class HomeController : BaseControler
{
    readonly IUserRepository _userRepository;

    // :-)
    public HomeController(IUserRepository userRepository)
    {
        _userRepository = userRepository;
    }
}

我们都知道,当需要依赖时,我们必须使用构造函数注入(inject)。如果它是一个可选的依赖项,我们可以改用属性注入(inject)

但是当只有你的基类需要依赖时你应该怎么做呢?

当你使用构造函数注入(inject)时,我认为你会污染所有派生类。

public abstract class BaseControler : Controller
{
    readonly IUnitOfWork _unitOfWork;

    public BaseControler(IUnitOfWork unitOfWork)
    {
        _unitOfWork = unitOfWork;
    }
}

public class HomeController : BaseControler
{
    readonly IUserRepository _userRepository;

    // :-(
    public HomeController(IUserRepository userRepository, 
       IUnitOfWork unitOfWork) : base(unitOfWork)
    {
        _userRepository = userRepository;
    }
}

当只在基类中需要依赖时,在基类中使用属性注入(inject)是否合适?

最佳答案

您没有污染派生类。您明确地向消费者声明,如果没有这种依赖性,此类将无法运行。

如果基类需要此依赖关系才能正常运行,因为派生类派生自此基类,它也隐式需要此依赖关系。所以第二个例子是正确的方法。您不应该为必需的依赖项使用属性注入(inject)。

关于c# - 当基类中只需要依赖时,在基类中使用属​​性注入(inject)是否合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10449786/

相关文章:

C# 早期绑定(bind)和后期绑定(bind)概念

c# - 将 IConfiguration 注入(inject)到 .NET 6.0 上的 Windows 窗体

java - 无法在 Spring bean 中进行 self 注入(inject)?

c# - 如何避免依赖注入(inject)构造函数的疯狂?

c# - 评论在 C# 中同时覆盖和被覆盖的方法?

c# - 对嵌套类型定义使用指令

c# - 这个不安全的代码是如何工作的?

asp.net-mvc-4 - 依赖注入(inject) - 即将调用 EF 存储库 Dispose 方法

c# - 使用 spring.net 创建字符串对象

c# - 我应该避免使用依赖注入(inject)和 IoC 吗?