Можно ли объявить все зависимости в контроллере?

Я использую Ninject MVC для привязки служб, используемых в моем контроллере.

Контроллер довольно сложен и имеет много методов, и эти методы требуют разных сервисов.

Мой вопрос: не является ли перебором отправлять конструктору контроллера все службы, которые используются в различных действиях?

Было бы разумнее отправить в конструктор Ninject Activator, а затем использовать активатор для создания экземпляров сервисов?

public class DefaultController : Controller
{
    private readonly Service1 _service1;
    private readonly Service2 _service2;
    private readonly Service3 _service3;

    public DefaultController(
        Service1 service1,
        Service2 service2,
        Service3 service3)
    {
        _service1 = service1;
        _service2 = service2;
        _service3 = service3;
    }

    public ActionResult Action1()
    {
        var result = _service1.GetResult();
        return View();
    }

    public ActionResult Action2()
    {
        var result = _service2.GetResult();
        return View();
    }

    public ActionResult Action3()
    {
        var result = _service3.GetResult();
        return View();
    }
}

vs

public class DefaultController : Controller
{
    private readonly IKernel _kernel;
    public DefaultController(IKernel kernel)
    {
        _kernel = kernel;
    }

    public ActionResult Action1()
    {
        Service1 _service1 = _kernel.Get<Service1>();
        var result = _service1.GetResult();
        return View();
    }

    public ActionResult Action2()
    {
        Service2 _service2 = _kernel.Get<Service2>();
        var result = _service2.GetResult();
        return View();
    }

    public ActionResult Action3()
    {
        Service3 _service3 = _kernel.Get<Service3>();
        var result = _service3.GetResult();
        return View();
    }
}

person Catalin    schedule 02.02.2016    source источник
comment
@MarkSeemann, ваш связанный обман довольно хорош и хорошо работает, пока вы можете переместить службы в один фасад, но что происходит, когда эти службы выполняют совершенно разные операции? Разве не было бы разумнее сказать OP, что он может создать детализированные контроллеры для каждой службы, чтобы лучше подчиняться SRP? TL; DR создайте один контроллер - одно действие для каждой службы, мне это кажется более сфокусированным.   -  person kayess    schedule 02.02.2016
comment
@kayess Действительно, стремление к SRP (и остальной части SOLID) является целью.   -  person Mark Seemann    schedule 02.02.2016