2011-02-16 14 views
12

मैंने हाल ही में को Ninject.Web.Mvc एक्सटेंशन के साथ आजमाया है, और मैंने कुछ अनोखा देखा है, जबकि ब्रेकिंग नहीं कर रहा है।निंजा और OnePerRequestModule

NinjectHttpApplication सार कक्षा में इस प्रकार है, वहाँ एक निर्माता परिभाषित किया गया है ..

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

मैं एक डिबगर ब्रेकप्वाइंट यहाँ रखा है, और यह कई बार कहा जाता हो जाता है। मुझे इस पर कोई वास्तविक दस्तावेज नहीं मिल रहा है। कार्यान्वयन कोड में, यह रेखा है जो मेरी आंख को पकड़ती है।

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

मेरे सवालों का इस प्रकार हैं ...

  • OnePerRequestModule
  • क्यों इस निर्माता कहा जाता है की जा रही है कई बार क्या है?
  • इस StartManaging विधि का उद्देश्य क्या है, यदि निर्माता को कई बार कहा जाता है?
+0

संबंधित: http://stackoverflow.com/questions/15778324/do-i-need-to-register-ninject-oneperrequestmodule-with-ninject-web-mvc-3-0/15786866# –

उत्तर

13

OnePerRequestModule कर्नेल के Cache प्रत्येक HTTP अनुरोध के पूरा होने पर से InRequestScope() घ वस्तुओं को हटा।

NinjectHttpApplication सीटीओआर को कई बार कहा जाता है क्योंकि आईआईएस उनमें से कई बनाता है। एक NinjectHttpApplication एक समय में केवल एक अनुरोध को संभाल सकता है। तो आईआईएस प्रति थ्रेड एक कम से कम एक उदाहरण उत्पन्न करता है।

StartManaging सभी OnePerRequestModules बताता है कि वे अनुरोध समाप्त होने के बाद निर्दिष्ट कर्नेल से InRequestScoped ऑब्जेक्ट्स जारी करेंगे।

+0

तो यह कुछ है मैं बरकरार रहना ठीक हूँ? ऐसा कुछ नहीं है जिसके बारे में मुझे चिंता करने की ज़रूरत है? – Ciel

+0

@Ciel Doc अब बहुत स्पष्ट होना चाहिए, http://stackoverflow.com/a/15786866/11635 और https://github.com/ninject/Ninject.Web.Common/wiki/InRequestScope देखें –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^