2009-12-02 4 views
6

आंतरिक निर्भरता इंजेक्शन का उपयोग करने के लिए पर्याप्त कक्षा पुस्तकालय परिसर बनाने के दौरान मुझे सावधान रहना चाहिए?आंतरिक संचालन के लिए निर्भरता इंजेक्शन का उपयोग कर कक्षा पुस्तकालयों के लिए सर्वोत्तम प्रथाएं क्या हैं?

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

उत्तर

6

मैं the facade pattern यहाँ का प्रयोग करेंगे: पुस्तकालय में, (जैसे कि एक साधारण Initialize() के रूप में) एक सार्वजनिक वर्ग कि कंटेनर प्रारंभ करता है पर एक सार्वजनिक विधि का पर्दाफाश, और, केवल आंतरिक रूप से महल विंडसर का उपयोग पुस्तकालय के भीतर ताकि पुस्तकालय ग्राहकों यह भी नहीं जानते कि आप इसका उपयोग कर रहे हैं।

+5

+1 ओपी में निर्धारित आवश्यकताओं को देखते हुए, फेकाडे पैटर्न एक अच्छे फिट की तरह लगता है। हालांकि, मैं सवाल करता हूं कि एक डीआई कंटेनर को कार्यान्वयन विस्तार के रूप में छिपाने का निर्णय बुद्धिमान है, लेकिन मुझे लगता है कि यह निर्भर करता है ... –

+0

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

+0

बीटीडब्ल्यू, 'प्रारंभिक()' विधि के बजाय, मैं दृढ़ता से एक फैक्टरी विधि या इसी तरह की http://blog.ploeh.dk/2011/05/24/DesignSmellTemporalCoupling की अनुशंसा करता हूं –

2

नहीं कि उत्तर काम नहीं करेगा, लेकिन मुझे लगता है कि यहां पर रहने वाले किसी भी व्यक्ति को this Q/A पर एक नज़र डालना चाहिए। इसे पढ़ने के बाद मुझे सहमत होना चाहिए कि using an IoC within a class library smells like a ServiceLocator (विरोधी पैटर्न) और Coupling a library to a container is a smell

प्रारंभ में मैंने सोचा कि मैं एक अच्छी चीज कर रहा हूं, सबसे पहले मैंने इसे पहले देखना था।