6

यह आमतौर पर स्वीकार किया जाता है कि आपके आवेदन के आस-पास एक आईओसी कंटेनर पास करना और सेवा लोकेटर की तरह इसका उपयोग करना बुरा अभ्यास है।कैसल विंडसर में कंटेनर पास किए बिना स्कॉप्ड लाइफस्टाइल का उपयोग करना संभव है?

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

कैसल विंडसर ने हाल ही में एक स्कॉप्ड लाइफस्टाइल जोड़ा है, जहां आप "उपयोग" ब्लॉक के भीतर कंटेनर। बेजिनस्कोप() को कॉल कर सकते हैं। इस "उपयोग" ब्लॉक के भीतर से, एक स्कॉप्ड लाइफस्टाइल के साथ पंजीकृत एक घटक को हल करने से "उपयोग" ब्लॉक की अवधि के लिए प्रत्येक बार एक ही उदाहरण वापस आ जाएगा।

container.Register(Component.For<A>().LifestyleScoped()); 

using (container.BeginScope()) 
{ 
    var a1 = container.Resolve<A>(); 
    var a2 = container.Resolve<A>(); 
    Assert.AreSame(a1, a2); 
} 

प्रश्न: यह देखते हुए कि BeginScope() कंटेनर पर एक विस्तार विधि है, मैं कैसे एक scoped जीवन शैली एक आवेदन जब तक कंटेनर के आसपास पारित हो जाता है में इस्तेमाल किया जा सकता है (जो मैं वास्तव में डॉन 'को देखने के लिए असफल टी करना चाहते हैं)। क्या किसी के पास कोई उदाहरण है कि स्कॉप्ड लाइफस्टाइल का उपयोग कैसे किया जा सकता है?

धन्यवाद,

टॉम

+3

कहां और क्यों आप स्कॉप्ड लाइफस्टाइल का उपयोग करने की योजना बना रहे हैं? –

+0

हाय क्रिस्टस्टोफ, मेरे पास अभी तक स्कॉप्ड लाइफस्टाइल का उपयोग करने की कोई योजना नहीं है। अगर मैं भविष्य में इसका उपयोग करना चाहता था, तो मैं बस कुछ उदाहरण देखना चाहता था कि स्कॉप्ड लाइफस्टाइल का सही तरीके से उपयोग कैसे किया जा सकता है। मुझे लगता है कि कारखानों के भीतर इसका उपयोग एक तार्किक दृष्टिकोण की तरह लगता है। –

+1

ऐसा लगता है कि मुझे क्या चाहिए, मैं स्कॉप्ड उदाहरणों को कन्स्ट्रक्टरों में निर्भरता के रूप में हल करने के लिए नहीं कर सकता, वही दायरे में वस्तुओं के साथ: http://stackoverflow.com/questions/25064516/dependency-injection- लाइफस्टाइल- सेवा-साझा-उदाहरण-बीच-2-उदाहरण- –

उत्तर

7

मुझे लगता है कि इसका उपयोग आमतौर पर एक कारखाने, जो आम तौर पर कंटेनर देखने को मिलता है के अंदर होगा। एक वेब अनुप्रयोग के बारे में सोचें: एक अर्थ में, एक एमवीसी ऐप में नियंत्रक का प्रत्येक आमंत्रण, या "पृष्ठ", अर्द्ध-स्वतंत्र प्रोग्राम चला रहा है। यह "अनुशासन" अपनी निर्भरताओं को हल करने के लिए अनुचित नहीं है। यही है, प्रत्येक नियंत्रक आमंत्रण को कंटेनर का उपयोग करके अपनी निर्भरताओं को हल करना चाहिए।

किसी विशेष वेब अनुरोध, या टीसीपी अनुरोध, या उपयोगकर्ता सत्र के दायरे में, आप कंटेनर को अलग-अलग वस्तुओं को हल करने के लिए चाहते हैं। यह आपके लिए एक कारखाने में से एक के अंदर साफ-सफाई करने का एक तरीका है। आईओसी के सभी उपयोगों के साथ, आपको इस पर ध्यान देना नहीं चाहिए कि इस तरह का दुरुपयोग न करें कि व्यवसाय तर्क आपके पंजीकरण कोड में घुसने के लिए समाप्त हो जाता है।

+1

सहमत हैं। कुछ और सोच और पढ़ने के बाद, आम सहमति यह प्रतीत होती है कि कंटेनर का उपयोग प्रवेश बिंदु असेंबली "समग्र रूट" (इंस्टॉलर्स/बूटस्ट्रैपर्स और कारखानों के माध्यम से) के भीतर किया जा सकता है, लेकिन इसमें अन्य असेंबली में "रिसाव" नहीं होना चाहिए आवेदन डोमेन –