2012-12-05 12 views
6

Ho aggiunto di recente sia Ninject che Ninject.Web.Mvc a un'applicazione Web ASP.NET MVC 4 esistente. Durante la navigazione del sito, ricevo il seguente eccezione, apparentemente a caso:Eccezione casuale a ninice: "Errore durante il caricamento del componente Ninik ICache"

[InvalidOperationException: Errore durante il caricamento Ninject componente Icache No tale componente è stato registrato in componente contenitore del kernel.

Suggerimenti: 1) Se è stata creata una sottoclasse personalizzata per KernelBase, assicurarsi di aver installato correttamente il metodo AddComponents(). 2) Assicurarsi di non aver rimosso il componente dal contenitore tramite una chiamata a RemoveAll(). 3) Assicurati di non aver creato accidentalmente più di uno kernel. ] Ninject.Components.ComponentContainer.Get (Tipo componente) in c: \ Projects \ Ninject \ ninject \ src \ Ninject \ Components \ ComponentContainer.cs: 160 Ninject.Components.ComponentContainer.Get() in c: \ Progetti \ Ninject \ ninject \ src \ Ninject \ Components \ ComponentContainer.cs: 116 Ninject.Web.Common. <> c__DisplayClass2.b__1 (kernel IKernel) in c: \ Projects \ Ninject \ Ninject.Web.Common \ src \ Ninject.Web.Common \ OnePerRequestHttpModule.cs: 74 Ninject.GlobalKernelRegistration.MapKernels (Azione`1 azione) in c: \ Projects \ Ninject \ Ninject \ src \ Ninject \ GlobalKernelRegistration.cs: 75 Ninject.Web.Common.OnePerRequestHttpModule.DeactivateInstancesForCurrentHttpRequest() in c: \ Projects \ Ninject \ Ninject.Web.Common \ src \ Ninject .Web.Common \ OnePerRequestHttpModule.cs: 74 Ninject.Web.Common.OnePerRequestHttpModule.b__0 (Oggetto o, EventArgs e) in c: \ Projects \ Ninject \ Ninject.Web.Common \ src \ Ninject.Web.Common \ OnePerRequestHttpModule.cs: 56 System.Web.SyncEventExecutionStep.Syst em.Web.HttpApplication.IExecutionStep.Execute() 136 System.Web.HttpApplication.ExecuteStep (IExecutionStep passo, booleano & completedSynchronously) +69

Una volta che ricevo l'eccezione di cui sopra, semplicemente rinfrescante o cliccando di nuovo sembra per far sì che il sito riprenda a funzionare normalmente di nuovo. Nessuna area del sito sembra causarne più di un'altra.

Il problema è molto simile alla domanda posta qui: Ninject + "Error loading Ninject component ICache". Tuttavia, il problema in questa domanda sembra essere causato da un bug con l'estensione stessa, ha più di un anno e sembra essere stato risolto.

Ciò si verifica senza alcuna modifica al file NinjectWebCommon.cs, qualunque sia. (Nessun modulo caricato, nessun collegamento aggiunto.) L'unico modo per farmi smettere è di escludere NinjectWebCommon.cs dal progetto, del tutto.

Non sono sicuro di quali altre informazioni includere, poiché non ho fatto altro che installare i pacchetti Nuget. Forse vale la pena notare che questo progetto include riferimenti ad altri assembly che utilizzano Ninject per DI.

Mi sono guardato intorno un po 'e non riesco a capire perché questo si sarebbe verificato. Ogni suggerimento sarà molto apprezzato.

+0

Ciò si verifica quando si utilizzano i metodi basati su WebActivator e Global.asax.cs per abilitare Ninject in un'applicazione MVC. – UnhipGlint

risposta

4

Ovviamente ci sono più kernel coinvolti nell'applicazione (MVC + Lib).Creare e disporre le istanze del kernel durante il runtime dell'applicazione è qualcosa che dovrebbe essere evitato. Suggerisco caldamente di modificare la progettazione in modo che vengano creati pochi kernel all'avvio dell'applicazione. E nessuno viene creato in seguito (comprese tutte le librerie).

Detto questo, non vedo alcun modo nel codice come questo problema possa verificarsi con l'ultima versione di Ninject. Potrebbe valere la pena verificare che l'applicazione e TUTTE le librerie siano nell'ultima versione di Ninject.

+0

Penso che proveremo a rifattorizzare il codice un po 'per eliminare la necessità di fare riferimento alle librerie usando Ninject. Vedrò quale effetto ha e anche verificare i numeri di versione. – UnhipGlint

+0

Il problema sembra essere andato via dopo aver rimosso il riferimento all'assieme esterno usando Ninject. Spero che lo chiarisca, grazie per il tuo aiuto! – UnhipGlint

Problemi correlati