2016-02-19 10 views
6

पर निर्भरता इंजेक्शन कोई भी मुझे Asp.Net 5 में निर्भरता इंजेक्शन के संदर्भ में निम्नलिखित समझने में मदद कर सकता है और ऑब्जेक्ट का निपटान कर सकता है।एएसपी.नेट 5 और ऑब्जेक्ट डिस्प्ले

मुझे यह समझने की आवश्यकता है कि मेरी सेवा IDispose इंटरफ़ेस लागू करती है, जो निपटान विधि को कॉल करेगा।

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddTransient<IService, Service>(); 
    services.AddScoped<IService, Service>(); 
    services.AddSingleton<IService, Service>(); 
    services.AddInstance<IService, Service>(); 
}   

उत्तर

4

IServiceCollection में आपके आवेदन में उपलब्ध सेवाओं का सेट शामिल है। आप उन सेवाओं को परिभाषित करते हैं जिन्हें आप उपयोग करना चाहते हैं और उनका जीवनकाल, और एप्लिकेशन आपके लिए तत्काल और निपटान करेगा।

क्षणिक

क्षणिक जीवन सेवाओं जब भी अनुरोध कर रहे हैं बनाई गई हैं:

4 अलग जीवन काल रहे हैं। यह जीवनकाल हल्के, स्टेटलेस सेवा के लिए सबसे अच्छा काम करता है।

Scoped

Scoped जीवन सेवाओं के अनुरोध के अनुसार एक बार बनाई गई हैं।

सिंगलटन

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

उदाहरण

आप सेवाओं कंटेनर के लिए सीधे एक उदाहरण जोड़ने के लिए चुन सकते हैं। यदि आप ऐसा करते हैं, तो इस उदाहरण का उपयोग सभी बाद के अनुरोधों के लिए किया जाएगा (यह तकनीक सिंगलटन-स्कोप्ड इंस्टेंस बनाएगी)। इंस्टेंस सेवाओं और सिंगलटन सेवाओं के बीच एक महत्वपूर्ण अंतर यह है कि इंस्टेंस सेवा कॉन्फ़िगर सर्विसेज में बनाई गई है, जबकि सिंगलटन सेवा पहली बार आलसी लोड हो चुकी है।

asp.net 5 आधिकारिक दस्तावेज महान है, इसे पढ़ने के लिए समय लेने के लिए: http://docs.asp.net/en/latest/fundamentals/dependency-injection.html


प्रलेखन कैसे वास्तव में निर्भरता जीवन काल निर्भरता इंजेक्शन सेवा के द्वारा नियंत्रित किया जाता है का उल्लेख नहीं है, लेकिन अगर आप खोज ServiceManager class

एक छोटे से अधिक विशिष्ट रूप से, जब एक गुंजाइश बनाई गई है, service scope factory एक नई सेवा गुंजाइश है, जो डब्ल्यू instanciated है रिटर्न: कोड में, आप ServiceProvider वर्ग, जो जीवन काल का प्रबंधन करता है मिलेगा एक सेवा प्रदाता के साथ। जब निर्भरता इंजेक्शन सेवा को किसी सेवा का निपटान करना होता है, तो वह service scope's dispose method पर कॉल करता है, जो service provider's dispose method पर कॉल करता है।

सेवा प्रदाता कैसे काम करता है? उनके पास _resolved सेवा नामक एक संपत्ति में सभी सेवा स्कोप हैं, और _transientDisposables नामक संपत्ति में सभी ट्रांजिएंट डिस्पोजेबल हैं।जब dispose() method of the service provider कहा जाता है, तो वह इन दो गुणों में मौजूद सभी वस्तुओं पर लूप करता है, और प्रत्येक ऑब्जेक्ट के लिए विधि का निपटान करता है।

आप सभी स्रोत यहाँ कोड है: Dependency Injection source code

+0

करो IService संसाधन जैसे साफ हो जाएगा क्या C# कथन का उपयोग – user334223

+0

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

+0

यही कारण है कि आप प्रत्येक सेवा को जो जीवनकाल देते हैं, वह बहुत महत्वपूर्ण है और इसे विचार करने की आवश्यकता है। – AdrienTorris

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