So che ci sono diverse domande un po 'come questa, ma dato che non sono in grado di trovare alcuna documentazione e nessuna delle altre domande ha alcuna risposta che mi aiuti, ecco:Ottenere l'ultima versione di Ninject che funziona con MVC 5/Web Api 2 più recente?
Creo un nuovo ASP. Applicazione NET (VS2013), MVC è selezionato, aggiungo API. Eseguo "update-package" nella Package Console per essere aggiornato alle ultime versioni (MVC 5.1.2, Web Api 5.1.2).
Quindi aggiungo i nuovi pacchetti Ninject.MVC5 e Ninject.Web.WebApi.
ho aggiungere queste righe al file web.config (Ninject vuole versione 5.0, ho 5.1):
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Http.WebHost" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
</dependentAssembly>
Negli App_start/NinjectWebCommon.cs il file aggiungo un unico legame:
private static void RegisterServices(IKernel kernel) {
kernel.Bind<ILogger, NLogLogger>();
}
Quindi aggiungo un singolo ApiController, con ILogger come singolo parametro nel costruttore e aggiungo ILogger come parametro al costruttore di HomeController.
Che dovrebbe essere per testare?
Mi manca qualche cablaggio per WebApi? Oppure succede "dietro le quinte"?
In ogni caso, il controller acessing api mi dà questo errore:
An error occurred when trying to create a controller of type 'TestController'. Make sure that the controller has a parameterless public constructor.
E cercando il HomeController mi dà questo:
Object reference not set to an instance of an object.
Ho provato la stessa cosa, senza l'aggiornamento agli ultimi pacchetti , stesso problema. Ho usato Ninject per anni con MVC 3 (ho anche provato il pacchetto Ninject.MVC3), e sono totalmente privo di idee sul motivo per cui ciò non funziona. Con WebApi, mi aspettavo qualche chiamata a SetResolver, ma ..
Qualsiasi aiuto sarebbe appagato!
Ecco cosa succede quando lavori con Ninject per anni, ma con un'astrazione intermedia! Grazie mille! Giusto per chiarire, cosa intendevi con "Registra l'ILogger una volta per entrambi" è che lo registro una sola volta e poi funziona sia per MVC che per WebApi? Almeno quello che sembra essere successo. –
@Remo Gloor: la tua risposta ha un errore di sintassi. Aggiungi '()' dopo 'kernel.Bind'. Quindi il codice di risposta completo sarà: 'kernel.Bind () .To ();'. Sono stanco di migliorare questa risposta, ma a quanto pare i ragazzi di Revisione non hanno trovato nulla di utile nel correggere l'errore di sintassi !!! –