6

मैं आम तौर पर आईओसी के लिए नया हूं और मैं समझने के लिए थोड़ा संघर्ष कर रहा हूं कि मैं जो करने की कोशिश कर रहा हूं वह कोई समझ में आता है। मेरे पास एक वेब फॉर्म एप्लिकेशन है जिसमें मैं अपने लिए कुछ बाइंडिंग को परिभाषित करने के लिए एक मॉड्यूल बनाना चाहता हूं। बाइंडिंग का इस्तेमाल मेरे व्यवसाय प्रबंधक वर्गों में भंडारों को इंजेक्ट करने के लिए किया जाएगा, जिससे मुझे इकाई प्रबंधकों का परीक्षण करने की अनुमति मिल जाएगी। इसके अलावा मैं कंटेनर को एंटीटी फ्रेमवर्क संदर्भ को अपने भंडारों में इंजेक्ट करने के लिए उपयोग करना चाहता हूं, इस तरह वे सभी प्रति http अनुरोध के समान संदर्भ साझा करते हैं।एक वेब अनुप्रयोग में निनजेक IKernel स्टोर करने के लिए कहां?

  1. मैं समझता हूँ कि मैं एक ही गिरी उदाहरण मेरी ऑब्जेक्ट निर्माण और अपने जीवन का प्रबंधन करने की जरूरत है: तो यहाँ मैं क्या सोच रहा हूं। उदाहरण के लिए यदि मैं एक-प्रति-httprequest प्रकार परिदृश्य चाहता हूं तो मुझे उस अवधि के लिए कर्नेल के उदाहरण की आवश्यकता होगी। अगर मुझे सिंगलटन की ज़रूरत है तो क्या होगा? फिर इसे किसी भी तरह से आवेदन किया जाना चाहिए। तो मैं IKernel उदाहरण कहां से स्टोर करूं? ऐसा लगता है कि मैं इसे अपने ग्लोबल.एक्सएक्स में स्थिर बनाना चाहता हूं, क्या यह सही दृष्टिकोण है और धागा सुरक्षा चिंता का विषय है?

  2. चूंकि मैं बाइंडिंग को परिभाषित करने के लिए बाइंड <> का उपयोग कर रहा हूं, मैं वेब/UI परत में उस परिभाषा को बनाने के बारे में कैसे जा सकता हूं जब मुझे यूआई से डेटा एक्सेस लेयर का संदर्भ नहीं देना चाहिए? मेरे संदर्भ जैसे दिखते हैं। वेब -> व्यवसाय -> डेटा एक्सेस। ऐसा लगता है जैसे मैं कर्नेल को बताना चाहता हूं "हे मेरे डेटा एक्सेस उदाहरणों का प्रबंधन करता है, लेकिन संकलन समय पर उनका संदर्भ नहीं है।" एक इस जैसे बाध्यकारी:

 

    //Any object requesting an instance of AdventureWorksEntities will get an instance per request 
    Bind<AdventureWorksEntities>().ToSelf().InRequestScope(); 
 

मुझे लगता है कि मैं इस गलत तरीके से आ जा सकता है, धन्यवाद।

+0

http://stackoverflow.com/questions/367178/usage-of-ioc-containers-specifically-windsor –

उत्तर

1

भाग 1- Ninject.Web एक्सटेंशन पर एक नज़र डालें - यह एप्लिकेशन स्तर पर कर्नेल रखता है। फिर आप उन अन्य संसाधनों का प्रबंधन कर सकते हैं जिनके भीतर कम जीवनकाल भी है।

इसके अलावा, सवाल और उदाहरण एफई और L2S DataContext प्रबंधन wrt Ninject और डि पर सामान्य रूप में (यह पिछले कुछ हफ्तों में आ रहा है [) के लिए यहाँ एक नजर है

अद्यतन: This answer to another question from the same OP is far more concrete (वहाँ एक KernelContainer वर्ग है एक .Inject(object) और एक .Kernel) के साथ

+0

रुबेन मैंने Ninject.Web में देखा और ऐसा लगता है कि मैं यही देख रहा हूं। मैं अनुमान लगा रहा हूं कि यह विस्तार ग्लोबल.एक्सएक्स की स्थिर संपत्ति बनाकर मैं अपने आप को क्या कर रहा था, इसे पूरा करने के लिए कुछ "वैश्विक" स्थैतिक कर्नेल संदर्भ का लाभ उठाता हूं। हालांकि Ninject.Web पथ नीचे जा रहा है मुझे थ्रेड सुरक्षा के बारे में चिंता करने की ज़रूरत नहीं है क्योंकि मुझे यकीन है कि उन्होंने इसका ख्याल रखा है। – e36M3

+0

@ ई 36 एम 3 कूल हैंडल/वाहन (मैं एक बीएच 5 ब्लिट्जन हूं: डी)। आपके पास यह है, 'स्थैतिक' अनुमान को घटाएं - यह एक प्रति एचटीपी अनुप्रयोग है (वहां प्रति प्रक्रिया और/या ऐपडोमेन हो सकता है), जो थोड़ा अलग हो सकता है।सुनिश्चित करें कि आप उन अन्य लेखों के लिए एक नज़र डालें - आपको प्रसंस्करण प्रवाह में उचित बिंदु पर अपना डीबी कार्य करने की आवश्यकता है और निदान को सही समय पर IDISposable आदि के माध्यम से करने की अपेक्षा नहीं की जा रही है - निंजा निपटान करता है, लेकिन async थोड़ी देर के बाद - अनुरोध प्रसंस्करण के दौरान जरूरी नहीं है। –

+0

धन्यवाद रूबेन, मैं कुछ और खुदाई करूँगा। मुझे पता है कि अनुरोध के अंत में एंटिटी फ्रेमवर्क संदर्भ को स्वचालित रूप से (एनएचबीरनेट की तरह) करने के लिए इसे प्राप्त करने का एक तरीका होना चाहिए, मैं पिछली पोस्टों की कुछ स्कैनिंग करूँगा यह देखने के लिए कि क्या मुझे कुछ झूठ मिल सकता है या नहीं। अभी के लिए मेरे पास SaveChanges विधि को कॉल करने के लिए जिम्मेदार "लेनदेन" में अंतिम व्यवसाय प्रबंधक है। एक बार फिर धन्यवाद। – e36M3

1

यह वास्तव में आपके वेब ऐप की जटिलता पर निर्भर करता है।

ऐसा लगता है कि आपके पास एक व्यवसाय और डेटा एक्सेस परत है; मेरे पास व्यक्तिगत रूप से 'आधारभूत संरचना' परत होगी जहां मैं अपने डी भंडार और सहायक वर्गों को स्टोर करूंगा।

+0

धन्यवाद जॉन, मुझे लगता है कि अपने सुझाव वास्तव में से बचने के लिए जाने के लिए एक ही रास्ता है परतों के बीच जोड़ना। मैंने किसी अन्य कंटेनर का उपयोग नहीं किया है, लेकिन मैंने सोचा होगा कि कॉन्फ़िगरेशन एक्सएमएल आधारित था या नहीं, इसका मतलब है कि कंटेनर डीएलएल को रनटाइम पर हल करेगा। – e36M3

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