Вызов супер конструктора в 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 7

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