Пример:
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 , вы, по моему мнению, загрязните все производные классы.
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;
}
}
Уместно ли использовать внедрение свойств в базовом классе, когда зависимость требуется только в базовом классе?