簡體   English   中英

在基類中只需要依賴項時,在基類中使用Property Injection是否合適?

[英]Is it appropriate to use Property Injection in a base class when a dependency is only required in the base class?

例:

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

public class HomeController : BaseControler
{
    readonly IUserRepository _userRepository;

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

我們都知道在需要依賴時我們必須使用Constructor Injection 如果它是可選的依賴項,我們可以使用Property Injection

但是當你的基類只需要依賴時你應該怎么做?

當您使用構造函數注入時,我認為會污染所有派生類。

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;
    }
}

當只在基類中需要依賴項時,在基類中使用Property Injection是否合適?

您沒有污染派生類。 您明確告訴消費者,如果沒有此依賴關系,此類將無法運行。

如果基類需要此依賴項才能正常運行,因為派生類派生自此基類,它也隱式地需要此依賴項。 所以第二個例子是正確的方法。 您不應該將屬性注入用於必需依賴項。

實際上你的派生類是一個基類。 某處沒有其他物體。 當您將某些內容傳遞給基礎構造函數時,實際上會初始化相同的對象。 它向客戶展示了您的實例所依賴的內容:

public HomeController(IUserRepository userRepository, IUnitOfWork unitOfWork)

有一個實例,它取決於兩件事:用戶存儲庫和工作單元。 調用基類構造函數只是從派生類中刪除初始化重復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM