2013-02-04 17 views
5

IServiceProvider मूल रूप से किसी भी आईओसी कंटेनर के लिए सिर्फ एक सामान्य इंटरफ़ेस है, या यह एक विशिष्ट ढांचे के लिए उपयोग किया जाता है? मैं अपना खुद का हल्का वजन आईओसी कंटेनर चला रहा हूं और मैं जानना चाहता हूं कि मुझे इसे लागू करना चाहिए या नहीं। क्या कोई अन्य इंटरफेस है जिसे मुझे लागू करना चाहिए? मैं या तो एमईएफ या एकता में वास्तव में रूचि नहीं रखता हूं। मैंने बड़े पैमाने पर दोनों का उपयोग किया है और वे वास्तव में मेरे वर्तमान प्रोजेक्ट के लिए काम नहीं करते हैं।'IServiceProvider` का उपयोग किस ढांचे का उपयोग करता है?

उत्तर

4

IServiceProvider एक आयातित (या शायद आयोजित ओवर) COM इंटरफेस है कि वस्तु जिसे आप किसी सेवा की पूछताछ के संदर्भ में निजी सुविधाओं के लिए इस्तेमाल किया जा करने का इरादा है है। शब्द 'सेवा' को यहां ढीला रूप से लागू किया गया है, इसका मूल रूप से कोई भी COM ऑब्जेक्ट था जिसका उपयोग GUID के आधार पर किया जा सकता है।

IServiceProvider @ MSDN (.NET reference)
IServiceProviderImpl Class @ MSDN (C++ ATL reference)

नेट में, आप इसे लागू करने के लिए जब तक आप एक ग्राहक है कि विशेष रूप से इसका समर्थन करता है, और कई मामलों में आप अभी तक अविवेक के एक अन्य स्तर पर जोड़ने की जरूरत नहीं होगी की जरूरत नहीं है यह IServiceProvider का उपयोग करके निहित है। साथ ही, आप सामान्य वस्तुओं को साझा करने या आईओसी/निर्भरता इंजेक्शन के आधार पर अन्य उपयोग पैटर्न को लागू करने के लिए अपनी योजना तैयार कर सकते हैं जो आपकी आवश्यकताओं के अनुसार अधिक लचीला या अधिक कठोर है।

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

WebBrowser Customization (Part 2) @ MSDN

2

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

http://blogs.msdn.com/b/alexj/archive/2010/01/07/creating-a-data-service-provider-part-2-iserviceprovider-datasources.aspx

मुझे नहीं लगता कि यह आईओसी कंटेनर से कोई लेना देना नहीं है है। मैंने यूनिटी और ऑटोफैक का काफी उपयोग किया है और इसे कभी भी इस्तेमाल नहीं किया है। अपने खुद के रोलिंग के लिए के रूप में, मैं सुझाव है कि आप अधिक मानक सामान्य तरह से अपने स्वयं के कंटेनर इंटरफ़ेस निर्धारित करना होगा:

public interface IContainer 
{ 
    T Resolve<T>(); 
} 

कि कुछ बदलाव के साथ सुंदर मानक है, लेकिन है कि अगर आपकी आवश्यकताएं पूरी आप भी सिर्फ IServiceProvider इस्तेमाल कर सकते हैं।

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

https://www.amazon.com/Dependency-Injection-NET-Mark-Seemann/

+0

अच्छा! धन्यवाद, मैं करूँगा। – Jordan

1

एएसपी.NET 5 "स्वयं-होस्टेड" मोड में IServiceProvider का उपयोग करता है, यानी, एक एएसपी.NET एप्लिकेशन और कंसोल एप्लिकेशन या सेवा में रनटाइम होस्ट करते समय।
(प्रकार Microsoft.Framework.Runtime.Common.DependencyInjection.ServiceProvider का एक ऑब्जेक्ट - जो IServiceProvider लागू करता है - आपके कंसोल ऐप कन्स्ट्रक्टर को पास किया जाता है।)

इस प्रकार, यदि आप एएसपी.NET 5 में एक अलग आईओसी कंटेनर का उपयोग करना चाहते हैं, तो आप इस इंटरफ़ेस को कार्यान्वित करना चाहेंगे। या अन्य आईओसी कंटेनर को उस कक्षा में लपेटें जो इस इंटरफ़ेस को लागू करता है।

+0

एएसपी.नेट कोर (पूर्व एएसपी.नेट 5) हमेशा 'आईएसईसीप्रोवाइडर' का उपयोग करता है, न केवल "स्वयं-होस्टिंग"। – John

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