2012-09-13 16 views
9

Possiedo un'applicazione MVC3 che vorrei trasferire su MVC4. Sto usando Ninject per l'iniezione di dipendenza. Utilizzando Nuget, ho aggiunto "Ninject" per il mio progetto e ha creato una fabbrica di controllo, come mostrato di seguitoNinject e asp.net MVC4

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() 
    { 
     //Add ninject bindings here 
    } 
} 

Questo funziona bene per MVC3, ma le cose sono cambiate in MVC4. Ho fatto qualche ricerca e ho trovato questo link che spiega come ottenere Ninject lavorare per MVC4

http://haacked.com/archive/2012/03/11/itrsquos-the-little-things-about-asp-net-mvc-4.aspx

Tuttavia, sto avendo difficoltà a raggiungere il codice nel link qui sopra per la compilazione. In particolare, il codice che dovrei mettere nel metodo Start() del file web.common mi dà errori dello spazio dei nomi non risolti

GlobalConfiguration.Configuration.ServiceResolver 
    .SetResolver(DependencyResolver.Current.ToServiceResolver()); 

Sia "ServiceResolver" e ".SetResolver" sono irrisolti. Quali riferimenti devo aggiungere per abilitarli? Inoltre, se possibile, puoi indicarmi un tutorial che mi mostra come ottenere il funzionamento di ninject in MVC4 senza dover installare il pacchetto nuget ninject.mvc3? Lo chiedo perché preferirei non avere alcun pacchetto installato nella mia applicazione che sia stato scritto appositamente per MVC3 per evitare che le cose possano spezzare la linea se questi pacchetti di nuget vengono aggiornati.

Edit: avrei dovuto aggiungere che sto usando Visual Studio 2012 e .Net 4.5 articolo

risposta

14

di Phil è sull'utilizzo Ninject con WebAPI. È questo che vuoi dire? Non è necessario farlo per la normale iniezione MVC. Inoltre, dovresti usare il pacchetto NuGet di Ninject.MVC3 con MVC4 (sì, lo so che dice MVC3, ma funziona ancora bene perché NuGet imposta Assembly Reindirizzamenti versione che rendono tutto Just Work), questo imposta tutto e tu don ' Ho bisogno di una fabbrica di controllori. Modifica il file NinjectWebCommon.cs per aggiungere i tuoi binding.

+1

non ho bisogno WebAPI. Dove dovrei aggiungere i miei binding in NinjectWebCommon.cs? Nel metodo "start"? Inoltre, si vede la possibilità di aggiornamenti del pacchetto ninject.mvc3 che interrompono la mia applicazione? Grazie –

+0

@curiouspanda - Gli aggiornamenti possono sempre rompere le cose e Ninject ha attraversato alcune iterazioni che hanno cambiato il modo "preferito" di lavorare con esso, ma in generale il codice dovrebbe rimanere compatibile. Se non usi WebAPI, l'articolo di Phil non si applica. Registrate i vostri mapping nel metodo RegisterServices di NinjectWebCommon.cs –

0

Basta semplicemente Aggiungi namespace

Using Ninject; 

dopo l'installazione modello da Nuget ... U basta installare "Ninject" ma non "Ninject per MVC3" dal Nuget Template