I have an MVC Controller with many different Actions. I use Ninject
for dependency injection.
Each action requires some specific dependencies.
How is it better to inject these dependencies?
Inject all of them in the Controller, and use the ones i need.
Inject only
IKernel
in Controller, and get the dependencies in the current action which is executed.
I think that approach #2 is better, because i can avoid creating some dependencies that will not be used.
Example 1:
public class MyController : Controller
{
private readonly IService1 _service1;
private readonly IService2 _service2;
private readonly IService3 _service3;
public MyController(IService1 service1, IService2 service2, IService3 service3)
{
_service1 = service1;
_service2 = service2;
_service3 = service3;
}
public ActionResult Action1()
{
_service1.Get();
return View();
}
public ActionResult Action2()
{
_service2.Get();
return View();
}
public ActionResult Action3()
{
_service3.Get();
return View();
}
}
Example 2:
public class MyController : Controller
{
private readonly IKernel _kernel;
public MyController(IKernel kernel)
{
_kernel = kernel;
}
public ActionResult Action1()
{
IService1 _service1 = _kernel.Get<IService1>();
_service1.Get();
return View();
}
public ActionResult Action2()
{
IService2 _service2 = _kernel.Get<IService2>();
_service2.Get();
return View();
}
public ActionResult Action3()
{
IService3 _service3 = _kernel.Get<IService3>();
_service3.Get();
return View();
}
}