2009-02-09 5 views
8

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

विशेष रूप से, इस पुस्तकालय ASP.NET MVC नियंत्रकों है कि विभिन्न सेवा इंटरफेस पर निर्भरता में शामिल है। मैं समझता हूं कि मैं एक IoCControllerFactory बना सकता हूं, लेकिन मुझे यकीन नहीं है कि यह सबसे अच्छा तरीका है, क्योंकि कुछ उपयोगकर्ता मेरी लाइब्रेरी प्रदान करने वाली कार्यक्षमता प्राप्त करने के लिए अपने आवेदन में इसका उपयोग नहीं कर सकते हैं या नहीं।

+1

मेरा मानना ​​है कि नहीं कर सकते मैं पहला सवाल वोट दें करने के लिए कर रहा हूँ:

मैं इस डिजाइन के बारे में दो पूर्ण ब्लॉग पोस्ट बनाया! महान सवाल –

+0

http://stackoverflow.com/questions/447715/introducing-an-ioc-container-to-legacy-code/1825667#1825667 –

उत्तर

5

सरल परिदृश्यों के लिए निर्माता में संपत्ति को पारित करना।

अधिक Complexe मामलों के लिए, एक आईओसी कंटेनर इंटरफ़ेस का उपयोग, एक डिफ़ॉल्ट कार्यान्वयन प्रदान करते हैं, लेकिन यह काफी सरल बनाने के लिए इतना है कि यह किसी भी contianer के साथ लागू किया जा सकता है।

CommonServiceLocator इंटरफ़ेस इस तरह है।


संपादित करें:

मैं अब है कि एक और डिजाइन धक्का CommonServiceLocator बेकार होगा होगा, और अपने पुस्तकालय उपयोगकर्ताओं के समग्र अनुभव को बेहतर बनाने होगा:

आप आईओसी कंटेनर है कि चुनें अपने आंतरिक पुस्तकालय आवश्यकताओं के लिए सभी आवश्यक सुविधाओं, और आप इसे आंतरिक रूप ILMerge ताकि अपने पुस्तकालय उपयोगकर्ताओं के लिए यह दिखाई नहीं देता। उपयोगकर्ताओं को यह नहीं पता है कि पुस्तकालय एक कंटेनर का उपयोग कर रहा है। अपने पुस्तकालय उपयोगकर्ताओं की वस्तु का दृष्टांत के लिए, एक तरीका प्रदान की जरूरत है - एक तरह से निर्भरता की कस्टम कार्यान्वयन प्रदान करने के लिए (जैसे लॉगर ...।) कारखानों - विन्यास:

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

IOC Container, Go Hide

IOC Container, Go Hider (part 2)

1

निर्भरता की संख्या काफी छोटा है, तो आप सिर्फ उन्हें में निर्माता के माध्यम से पारित कर सकते हैं। इस तरह आपके उपभोक्ताओं के पास आपकी वस्तुओं को बनाने के तरीके पर पूर्ण विकल्प है।

गुण/Setters या कस्टम initialisation वस्तुओं विकल्प संभावनाएं हैं और डिजाइन स्पेक्ट्रम में अन्य क्षेत्रों को कवर।

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