2013-03-11 1 views
7

Sono ad una perdita di cosa fare con la moltitudine di documentazione disponibile tramite Google in .net per quanto riguarda utilizzando Ninject con asp.net MVC 4sono fabbriche di controller neccessary quando si utilizza Ninject in ASP.NET MVC 4

Prima di tutto, voglio sapere se le fabbriche di Controller sono necessarie in asp.net.

Inoltre, è l'iniezione del costruttore davvero l'unico modo che possiamo fare l'iniezione di dipendenza con MVC 4 perché l'iniezione di proprietà e l'iniezione metodo non sembra funzionare quando ho li uso con i miei controllori

risposta

9

Io non sono un esperto di Ninject ma per quanto ne so, lo sto solo usando per collegare il mio DataSource Interface e il mio EfDb Class al resto della mia applicazione.

Se avete bisogno di un buon libro che ha un'applicazione reale costruito intorno Ninject prova: Pro ASP.NET MVC 3 Framework, Third Edition

o

Pro Asp.Net Mvc 4

ci sono pochissime righe di codice di solito sono interessati con

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

Quindi registra il tuo NinjectControllerFactory in Global.asax.cs con:

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

Come si può vedere, questa classe di utilizzo Method Injection utilizzando private void AddBindings(). Questo rende molto facile se si sta seguendo Test Driven Development (TDD)

+0

Ma ho letto da qualche parte che se l'applicazione viene ereditata da NinjectHttpApplication e sovrascrive i metodi appropriati, i controller avranno automaticamente le dipendenze soddisfatte tramite il contenitore IOC. –

+0

@PeterEdike Ognuno ha il proprio modo di scrivere codice, questo gioco si basa su uno stile che funziona e migliorandolo. Ti suggerirei di leggere uno di quei libri che ho menzionato. – Komengem

+0

sì, ho già il libro. sto leggendo al momento –

2

Vedere la documentazione qui:. https://github.com/ninject/ninject.web.mvc/wiki/Dependency-injection-for-controllers, "L'unica cosa che deve essere fatto è quello di configurare i binding Ninject per le sue dipendenze Il controller stesso sarà trovato da Ninject anche senza aggiungere una rilegatura. "

NInject imposta automaticamente le dipendenze del controller (purché abbia un binding per questi tipi).

+0

Sto usando MVC5/WebApi2 e questo metodo non ha funzionato per me. Il suggerimento di @Komengem ha funzionato. – codeMonkey