2015-06-16 9 views
19

मेरे पास एक एमवीसी 5 एप्लीकेशन है जो निनजेक्ट का उपयोग करता है और मैं इसमें हैंगफायर जोड़ रहा हूं।हैंगफायर कॉन्फ़िगरेशन और निनजेक्ट कॉन्फ़िगरेशन

जब मैंने निनजेक्ट जोड़ा है, तो मैंने कॉन्फ़िगरेशन में इसकी सादगी के कारण NinjectWebCommon nuget पैकेज का उपयोग किया है। तो अब के लिए निनजेक्ट NinjectWebCommon कक्षा के माध्यम से कॉन्फ़िगर किया गया है जो एक मानक कर्नेल बनाते हैं और बाइंडिंग जोड़ते हैं।

इसके अलावा मुझे लगता है कि मैं लोड गिरी

private static IKernel CreateKernel() { 
    var kernel = new StandardKernel(new MyCustomModule()); 
    try { 
     kernel.Bind<Func<IKernel>>().ToMethod(ctx =>() => new Bootstrapper().Kernel); 
     kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>(); 

     RegisterServices(kernel); 
     return kernel; 
    } 
    catch { 
     kernel.Dispose(); 
     throw; 
    } 
} 

Ninject वेब आम WebActivatorEx वर्ग के माध्यम से पंजीकृत है

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(MyProject.Web.NinjectWebCommon), "Start")] 
[assembly: WebActivatorEx.ApplicationShutdownMethodAttribute(typeof(MyProject.Web.NinjectWebCommon), "Stop")] 

अब समस्या पर कैसे से संबंधित है बनाने कुछ कस्टम मॉड्यूल बनाया है निंजा कॉन्फ़िगरेशन देखने के लिए हैंगफायर बनाएं। Hangfire.Ninject पैकेज को देख कर मैं

पढ़ सकते हैं पैकेज IGlobalConfiguration इंटरफेस के लिए एक विस्तार तरीका प्रदान करता है:

var kernel = new StandardKernel(); GlobalConfiguration.Configuration.UseNinjectActivator(kernel);

अब मेरे सवाल कर रहे हैं:

  • IGlobalConfiguration इंटरफ़ेस की वजह से, मैं OWIN स्टार्टअप विधि (जहां हैंगफायर कॉन्फ़िगरेशन पहले से ही रखा गया है) के अंदर हैंगफायर निंजा कॉन्फ़िगरेशन जोड़ना चाहिए। मैं कैसे वर्तमान Ninject कर्नेल (एक है कि NinjectWebCommon कॉन्फ़िगर किया है मिलना चाहिए?
  • क्या निष्पादन के आदेश के बारे में? पहले या Owin स्टार्टअप के बाद क्रियान्वित WebActivatorEx है?
  • अगर मैं विन्यास दो बार निष्पादित करने के लिए कोशिश क्या होता है ?

अधिक आम तौर पर, मैं कैसे दोनों के बीच Ninject विन्यास साझा कर सकते हैं?

उत्तर

10

मैं कैसे वर्तमान Ninject कर्नेल

मिलना चाहिए

Ninject.Web.Common.Bootstrapper के कोड को देखते हुए यह पता चलता है कि यह कर्नेल का एक एकल स्थिर उदाहरण संग्रहीत करता है, और Kernel संपत्ति के माध्यम से इसे उजागर करता है। इसका मतलब है आप Owin स्टार्टअप विधि के अंदर ऐसा कर सकते हैं कि:

GlobalConfiguration.Configuration.UseNinjectActivator(
            new Ninject.Web.Common.Bootstrapper().Kernel); 

और आप एक ही IKernel उदाहरण, जो कुछ भी बाइंडिंग आप NinjectWebCommon.RegisterServices

क्या निष्पादन के आदेश के बारे में में विन्यस्त के साथ पूरा होगा ? OWIN स्टार्टअप से पहले या उसके बाद निष्पादित WebActivatorEx है?

इससे पहले। आप प्रत्येक में ब्रेकपॉइंट्स सेट करके यह सत्यापित कर सकते हैं (जैसा मैंने किया)।More info

अधिक आम तौर पर, मैं दोनों के बीच निंजा कॉन्फ़िगरेशन कैसे साझा कर सकता हूं?

यदि मैं कॉन्फ़िगरेशन को दो बार निष्पादित करने का प्रयास करता हूं तो क्या होता है?

कर्नेल कॉन्फ़िगरेशन "संरचना रूट" है। इस विषय पर एक प्रमुख विशेषज्ञ मार्क सीमैन के अनुसार, should only be one of these in the application, और it should be as close as possible to the application's entry point.

+0

संपादित करें: बेहतर बूटस्ट्रैपर आधारित सुझाव के साथ प्रतिस्थापित कस्टम संपत्ति सुझाव, और संरचना जड़ों पर थोड़ा जोड़ा गया। – CrazyPyro

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