Вызов супер конструктора в C#
У меня есть классы, такие как AccountsController, ProductsController и т. д., которые все наследуются от BaseController. Unity настраивает мои услуги по мере необходимости. Все эти классы также требуют службы _sequence. Поскольку это общее требование для всех классов, я хотел бы закодировать это в BaseController.
public class AccountsController : BaseController
{
public AccountsController(
IService<Account> accountService) {
_account = accountService;
}
public class ProductsController : BaseController
{
public ProductsController(
IService<Account> productService) {
_product = productService;
}
public class BaseController : Controller
{
public IService<Account> _account;
public IService<Product> _product;
protected ISequenceService _sequence;
public BaseController(
ISequenceService sequenceService) {
_sequence = sequenceService;
}
Но как я могу это сделать? Должен ли я настроить вызов BaseController внутри конструкторов каждого из AccountsController и ProductsController?
1 ответ:
Вы можете связать конструкторы:
public class ProductsController : BaseController { public ProductsController( IService<Account> productService) : base(productService) { _product = productService; } }
Обратите внимание, что цепочка
BaseController
(с помощьюbase
ключевое слово) был передан параметрproductService
, жестким это может быть что угодно.Обновление:
Вы могли бы сделать следующее (инъекция зависимости бедняги):
public class ProductsController : BaseController { public ProductsController( IService<Account> productService) : base(new SequenceService()) { _product = productService; } }
Или передайте зависимость от
ISequenceService
через наследующие типы:public class ProductsController : BaseController { public ProductsController( IService<Account> productService, ISequenceService sequenceService) : base(sequenceService) { _product = productService; } }