Пример:
public abstract class BaseControler : Controller
{
public IUnitOfWork UnitOfWork { get; set; }
}
public class HomeController : BaseControler
{
readonly IUserRepository _userRepository;
// :-)
public HomeController(IUserRepository userRepository)
{
_userRepository = userRepository;
}
}
Мы все знаем, что мы должны использовать внедрение конструктора, когда зависимость требуется. Если это необязательная зависимость, вместо нее можно использовать внедрение свойства.
Но что делать, если зависимость нужна только вашему базовому классу?
Когда вы будете использовать внедрение конструктора, вы, по моему мнению, загрязните все производные классы.
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;
}
}
Уместно ли использовать внедрение свойств в базовый класс, когда зависимость требуется только в базовом классе?