可以在Controller中声明所有依赖项吗?

时间:2016-02-02 08:03:31

标签: dependency-injection ninject ninject.web.mvc

我正在使用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();
    }
}

0 个答案:

没有答案