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 когда зависимость является требуется. Если это факультативно зависимость, мы можем использовать Вклад в эксплуатацию.
Но что делать, если только ваш базовый класс требует зависимости?
Если вы использовали бы Конструктор 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;
}
}
ли approperiate использовать Injection Property в базовом классе, когда зависимость требуется только в базовом классе?
Я вижу вашу точку зрения, но проблема, которую я получу, - это много параметров конструктора. Дело в том, что производные классы не говорят напрямую с зависимостью, а не от базового класса. Поэтому я бы различал прямые вызовы зависимости и косвенные вызовы зависимости. – Rookian
@Rookian, если вы попадаете в ситуацию, когда у вас есть несколько параметров конструктора, вы можете подумать о создании службы, которая будет агрегировать эти зависимости, а затем вставить только конструктор в конструктор. –
+1 Наслаждайтесь композицией над наследованием. Если это проблема со слишком большим количеством параметров конструктора, обвините свою стратегию наследования, а не конструкторскую инъекцию. –