[英]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.