У меня есть контроллер, похожий на этот.
public SomeController : Controller
{
private readonly InjectableIntoEveryController _thing;
public SomeController(InjectableIntoEveryController thing, ...) { ... }
}
Естественно, разработчик во мне хочет переместить вещь , то есть InjectableIntoEveryController , на базовый контроллери избегайте явных и пропускаемых инъекций.Поэтому я создаю следующее.
public BaseController : Controller
{
private readonly InjectableIntoEveryController _thing;
public BaseController(InjectableIntoEveryController thing, ...) { ... }
}
public SomeController : BaseController
{
public SomeController(...) { ... }
}
Это не компилируется, потому что в базовом классе нет конструктора без параметров.Однако, если мы добавим один из них, как показано ниже, инъекции не произойдет, что не соответствует цели.
public BaseController : Controller
{
private readonly InjectableIntoEveryController _thing;
public BaseController() { ... }
public BaseController(InjectableIntoEveryController thing, ...) { ... }
}
Единственный найденный мной способ заставить его летать - это передать вещь , используя base (...) , но для этого требуетсябыть введен, что противоречит цели всего рефакторинга.
public SomeController : BaseController
{
public SomeController(InjectableIntoEveryController thing, ...)
:base(thing) { ... }
}
Есть ли лучший способ гарантировать, что базовый контроллер получает инъецированные вещи, как я бы этого хотел, без явной передачи их от наследующего