2011-02-16 3 views
12

J'ai récemment essayé Ninject avec l'extension Ninject.Web.Mvc, et j'ai remarqué quelque chose de particulier et, tout en ne cassant pas, prêtant à confusion.Ninject et OnePerRequestModule

Dans la NinjectHttpApplication classe abstraite, il est un constructeur défini comme suit ..

/// <summary> 
    /// Initializes a new instance of the <see cref="NinjectHttpApplication"/> class. 
    /// </summary> 
    protected NinjectHttpApplication() 
    { 
     this.onePerRequestModule = new OnePerRequestModule(); 
     this.onePerRequestModule.Init(this); 
    } 

J'ai mis un point d'arrêt de débogage ici, et cela est appelé à quelques reprises. Je ne trouve pas de vraie documentation à ce sujet. Dans le code d'implémentation, il y a cette ligne qui attire mon attention.

  if (kernel.Settings.Get("ReleaseScopeAtRequestEnd", true)) 
      { 
       OnePerRequestModule.StartManaging(kernel); 
      } 

Mes questions sont les suivantes ...

  • Qu'est-ce que OnePerRequestModule
  • Pourquoi est-ce constructeur étant appelé plusieurs fois?
  • Quel est le but de cette méthode StartManaging, si le constructeur est appelé plusieurs fois?
+0

liée: http://stackoverflow.com/questions/15778324/do-i-need-to-register-ninject-oneperrequestmodule-with-ninject-web-mvc-3-0/15786866# –

Répondre

13

Le OnePerRequestModule supprime InRequestScope() d objets du Cache du noyau à la fin de chaque requête HTTP.

Le ctor NinjectHttpApplication est appelé plusieurs fois car IIS en crée plusieurs. Un NinjectHttpApplication ne peut gérer qu'une demande à la fois. Ainsi, IIS génère (au moins) une instance par thread.

StartManaging indique à tous OnePerRequestModules de libérer les objets InRequestScoped du noyau spécifié après la fin de la demande.

+0

Donc c'est quelque chose Je suis d'accord pour laisser intact? Ce n'est pas quelque chose dont j'ai besoin de m'inquiéter? – Ciel

+0

@Ciel Doc devrait être très clair maintenant, voir http://stackoverflow.com/a/15786866/11635 et https://github.com/ninject/Ninject.Web.Common/wiki/InRequestScope –