Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Are controller factories neccessary when using Ninject in ASP.NET mvc 4

I am at a loss of what to do with the multitude of documentation available through google in .net as regards using Ninject with asp.net mvc 4

First of all, i want to know if Controller factories are neccessary in asp.net.

Also, is constructor injection really the only way we can do dependency injection with MVC 4 because property injection and method injection does not seem to work when i use them with my controllers

like image 444
Seth IK Avatar asked Mar 11 '13 08:03

Seth IK


2 Answers

I am not an expert on Ninject but as far as i know, i am only using it to link my DataSource Interface and my EfDb Class to the rest of my application.

If you need a good book that has a Real Application built around Ninject try: Pro ASP.NET MVC 3 Framework, Third Edition

or

Pro Asp.Net Mvc 4

There are very few lines of code i am usually concerned with

public class NinjectControllerFactory : DefaultControllerFactory
{
    private IKernel ninjectKernel;

    public NinjectControllerFactory()
    {
        ninjectKernel = new StandardKernel();
        AddBindings();
    }

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        return controllerType == null
                   ? null
                   : (IController) ninjectKernel.Get(controllerType);
    }

    private void AddBindings()
    {
        ninjectKernel.Bind<IDataSource>().To<EfDb>();
    }
}

Then register your NinjectControllerFactory in Global.asax.cs with:

ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());

As you can see, this class use Method Injection using private void AddBindings(). This makes it very easy if you are following Test Driven Development (TDD)

like image 200
Komengem Avatar answered Nov 18 '22 21:11

Komengem


See the documentation here: https://github.com/ninject/ninject.web.mvc/wiki/Dependency-injection-for-controllers, "The only thing that has to be done is to configure the Ninject bindings for its dependencies. The controller itself will be found by Ninject even without adding a binding."

NInject will automagically set up your controller dependencies (provided it has a binding for those types).

like image 28
stevef4000 Avatar answered Nov 18 '22 21:11

stevef4000