Уместно ли использовать внедрение свойств в базовом классе, если зависимость требуется только в базовом классе?

Пример:

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

Уместно ли использовать внедрение свойств в базовом классе, когда зависимость требуется только в базовом классе?

14
задан Rookian 4 May 2012 в 13:26
поделиться