Muss ich Ninject.OnePerRequestModule mit Ninject.Web.MVC 3.0 registrieren?

8

Ich benutze Ninject für DI und die Ninject.MVC3 Erweiterung innerhalb einer MVC4 App, speziell Version 3.0.0.6.

Wenn Sie die Dokumentation zu Ninjects Wiki lesen, scheint es, dass die Lebensdauer von Objekten, die mit% erstellt wurden, co_de% werden eigentlich von ASP.NET gesteuert und um richtig zu bereinigen, sollte man das InRequestScope HttpModule registrieren.

Es sieht jedoch so aus, als wäre dieser Doco nicht mehr aktuell, da OnePerRequest nicht gefunden werden kann.

Auf der anderen Seite habe ich kürzlich einige Bits gelesen, die darauf hindeuteten, dass type="Ninject.OnePerRequestModule"/> bereits gehandelt hat mit NinjectHttpApplication .

Meine Frage ist, ob Ninject.Web.MVC 3.0 dieses Problem bereits behandelt oder ob ich das HttpModule noch manuell zu meiner 'web.config' hinzufügen muss.

Ich habe das Folgende zu meiner Konfiguration hinzugefügt und alles scheint zu funktionieren, obwohl ich keine Ahnung habe, wie man testen soll, wenn Objekte zerstört werden:

%Vor%

Muss ich das OnePerRequest HttpModule manuell hinzufügen oder behandelt Ninject.Web.MVC das für mich?

    
Paul M Sorauer 03.04.2013, 03:22
quelle

1 Antwort

9

Exec summary: Nein, Sie müssen nichts in web.config tun.

Sie können die Überprüfung manuell durchführen mit:

  • Verbinde etwas IDisposable .InRequestScope()
  • fügt es dem ctor eines Controllers hinzu
  • Anfügen eines Debuggers, Setzen eines Haltepunkts in void Dispose()
  • löst manuell ein HttpRequest
  • aus

Wenn du den Dispose getroffen hast, war es Ninject, der den Bären erschoss (und du wirst einen Call-Stack haben, um es zu beweisen).

Was verdrahtet es? Das Ninject.Web.Common NuGet-Paket fügt hinzu:

%Vor%

DynamicModuleUtility stammt von Microsoft.Web.Infrastructure (und der Aufruf der Methode Start wird von:

gesteuert %Vor%

(kommt aus dem WebActivator NuGet-Paket)

Pedantisch sprechend: Der Docco sagt sagte:

  

Um mehr deterministisches Verhalten zu erhalten, können Sie Folgendes tun:

     
  1. ...

  2.   
  3. Verwenden Sie die Ninject.Web.Common-Erweiterungen, die das OnePerRequestModule für Sie registrieren.

  4.   

...

  

Sie können sich registrieren

(meine Betonung). Ich werde es deutlicher machen ...

BTW zu Beginn der Übung, diese Frage zu beantworten, hatte ich keine speziellen Kenntnisse, nur die Quelle zu Ninject Ninject.Web.Common und eine meiner Apps.

    
Ruben Bartelink 03.04.2013, 12:04
quelle

Tags und Links