2012-12-05 6 views
6

Ich habe vor kurzem Ninject und Ninject.Web.Mvc zu einer bestehenden ASP.NET MVC 4 Webanwendung hinzugefügt. Wenn die Website surfen, erhalte ich die folgende Ausnahme, scheinbar zufällig:Zufällig auftretendes Ninject Ausnahme: "Fehler beim Laden der Ninject Komponente ICache"

[InvalidOperationException: Fehler beim Laden Ninject Komponente ICache Keine solche Komponente in der Kernel-Komponente Container registriert.

Vorschläge: 1) Wenn Sie eine benutzerdefinierte Unterklasse für KernelBase erstellt haben, stellen Sie sicher, dass Sie die AddComponents() -Methode ordnungsgemäß implementiert haben . 2) Stellen Sie sicher, dass Sie die Komponente nicht über einen Aufruf von RemoveAll() aus dem Container entfernt haben. 3) Stellen Sie sicher, dass Sie nicht versehentlich mehr als einen Kernel erstellt haben. ] Ninject.Components.ComponentContainer.Get (Typ Komponente) in c: \ Projects \ Ninject \ ninject \ src \ Ninject \ Components \ ComponentContainer.cs: 160 Ninject.Components.ComponentContainer.Get() in c: \ Projekte \ Ninject \ ninject \ src \ Ninject \ Komponenten \ ComponentContainer.cs: 116 Ninject.Web.Common. <> c__DisplayClass2.b__1 (IKernel-Kernel) in c: \ Projekte \ Ninject \ Ninject.Web.Common \ src \ Ninject.Web.Common \ OnePerRequestHttpModule.cs: 74 Ninject.GlobalKernelRegistration.MapKernels (Action`1 Aktion) 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 (Objekt 0, EventArgs e) in c: \ Projekte \ 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 Schritt, Boolean & completedSynchronously) +69

Sobald ich die Ausnahme oben empfangen, einfach erfrischend oder klicken zurück scheint damit die Website wieder normal funktioniert. Kein einziger Bereich der Website scheint dafür verantwortlich zu sein.

Das Problem ist der hier gestellten Frage recht ähnlich: Ninject + "Error loading Ninject component ICache". Das Problem in dieser Frage scheint jedoch auf einen Fehler mit der Erweiterung selbst zurückzuführen zu sein, der älter als ein Jahr ist und anscheinend behoben wurde.

Dies geschieht ohne jegliche Änderung an der Datei NinjectWebCommon.cs, was auch immer. (Keine Module geladen, keine Bindungen hinzugefügt.) Die einzige Möglichkeit für mich zu stoppen ist es, NinjectWebCommon.cs aus dem Projekt insgesamt auszuschließen.

Ich bin mir nicht sicher, welche anderen Informationen enthalten sind, da ich wenig anderes getan habe, als die Nuget-Pakete zu installieren. Vielleicht ist es erwähnenswert, dass dieses Projekt Referenzen zu anderen Assemblys enthält, die Ninject für DI verwenden.

Ich habe mich ziemlich viel umgesehen und weiß nicht, warum das passieren würde. Irgendwelche Vorschläge würden sehr geschätzt werden.

+0

Dies tritt auf, wenn Sie die Methoden WebActivator und Global.asax.cs verwenden, um Ninject in einer MVC-Anwendung zu aktivieren. – UnhipGlint

Antwort

4

Offensichtlich sind mehrere Kernel in Ihrer Anwendung (MVC + Libs) beteiligt.Das Erstellen und Entsorgen von Kernel-Instanzen zur Laufzeit der Anwendung sollte vermieden werden. Ich empfehle dringend, Ihr Design so zu ändern, dass beim Start der Anwendung nur wenige Kernel erstellt werden. Und keiner wird später erstellt (einschließlich aller Bibliotheken).

Nachdem gesagt, ich sehe keinen Weg in den Code, wie dieses Problem mit der neuesten Version von Ninject passieren kann. Es lohnt sich zu überprüfen, ob die Anwendung und ALLE Bibliotheken auf der neuesten Version von Ninject sind.

+0

Ich denke, wir werden versuchen, den Code ein wenig zu refaktorieren, um die Notwendigkeit zu beseitigen, die Bibliotheken mit Ninject zu referenzieren. Ich werde sehen, welchen Effekt das hat und auch die Versionsnummern überprüfen. – UnhipGlint

+0

Das Problem scheint verschwunden zu sein, nachdem der Verweis auf die externe Baugruppe mit Ninject entfernt wurde. Hoffentlich klärt das auf, danke für deine Hilfe! – UnhipGlint