5

के साथ वायरिंग निर्भरताओं के लिए विकल्प एन इंजेक्ट (अधिमानतः 2.0) के साथ, हमारे पास वेब अनुप्रयोग में हमारी ऑब्जेक्ट निर्भरताओं को किस प्रकार के तारों को तारित करना है?एन इंजेक्ट

क्या उन्हें एक XML कॉन्फ़िगरेशन फ़ाइल में परिभाषित किया जा सकता है?

या इसे कोड के माध्यम से किया जाना है?

उत्तर

5

Ninject एक्सएमएल विन्यास, खेद नहीं है, लेकिन मैं एक सीधा लिंक प्रदान नहीं कर सकते (क्योंकि अपनी साइट फ़्लैश तत्व है), लेकिन यहाँ ninject.org से एक उद्धरण है:

एक्सएमएल से अपने आप को मुक्त करें

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

+9

यह आश्चर्यजनक है कि वे एक प्लस की तरह नकारात्मक ध्वनि कैसे बना सकते हैं। अधिकांश अन्य DI \ Ioc आपको एक्सएमएल या कोड का उपयोग करने की अनुमति देता है। –

+2

यह गैर-नकारात्मक है। जानबूझ कर कट एक्सएमएल समर्थन, क्योंकि यह एक रखरखाव दर्द है। – Restuta

+7

मैं ज्यादातर अपने बाइंडिंग को मैप करने के लिए कोड का उपयोग करता हूं लेकिन ऐसे मामले हैं जो कॉन्फ़िगरेशन काम करता है। डीबग के लिए मैं IMailService को VirtualMailService पर बाध्य करना चाहता हूं लेकिन रिलीज में SmtpMailService का उपयोग करना चाहता हूं। कॉन्फ़िगरेशन फ़ाइलों को रिलीज पर्यावरण के आधार पर बदल दिया जाता है। –

3

आप क्या हासिल करने के लिए देख रहे हैं? आप किस प्रकार की चीजें कॉन्फ़िगर करना चाहते हैं? गतिशील रूप से एक रणनीति का चयन? पोर्ट नंबर में गुजर रहा है? एक बेहतर उत्तर पाने के लिए आप जो सोच रहे हैं उसके बारे में आप बहुत अधिक जानकारी प्रदान कर सकते हैं [जिसे आप स्वीकार कर सकते हैं: पी]। - आम तौर पर आप छोटे केंद्रित सबसेट में उन जैसे विभाजित करने के लिए चाहता हूँ

  1. जाना जाता वस्तु तारों (डीआई)
  2. विन्यास:

    आप की चिंताओं को विभाजित करने की आवश्यकता जोरदार config तत्व टाइप एक साथ mishmashed एक ला appSettings

  3. plugins/अज्ञात वस्तु तारों एक बड़ा ढेर में सेटिंग्स की एक वैश्विक पूल होने बनाम (MEF?)

पहले पूल, कोड में यह कर रही है बस सही तरीका है और मैं किसी भी लाभ एक्सएमएल के बारे में सोच नहीं सकता, esp। https://github.com/ninject/ninject.extensions.xml

आप एक बहुत अधिक शक्तिशाली कोड में बाध्यकारी हालांकि कर सकते हैं: मजबूत नामों आदि

10

के संदर्भ में वहाँ एक्सएमएल आधारित विन्यास के लिए एक विस्तार है।

4

कोड में केवल बाइंडिंग को परिभाषित करने के साथ समस्या यह है कि आपको डीएलएल के संदर्भ को जोड़ना होगा। आप नए डीएल (पुराने को संदर्भ हटाने के संदर्भ में) को जोड़ने के बिना बाध्यकारी नहीं बदल सकते हैं, कोड बदल सकते हैं और पुनः संकलित कर सकते हैं।

अगर हमारे पास xml कॉन्फ़िगरेशन था तो मुझे संदर्भ की आवश्यकता नहीं होगी, और उसे पुन: संकलित नहीं करना होगा। अभी मेरे पास एमवीसी ऐप है जो नियंत्रकों को रिपॉजिटरीज पास करने के लिए DI का उपयोग कर रहा है। बाइंडिंग जोड़ने के लिए निनजा कोड और कुछ भी नहीं, भंडारों के ठोस कार्यान्वयन का उपयोग करता है। और फिर भी मुझे कार्यान्वयन वाले डीएलएल में संदर्भ जोड़ने की जरूरत है। कोड की केवल एक पंक्ति के लिए!

या शायद निनजेक्ट का उपयोग करके इसे प्राप्त करने की संभावना है?

+2

यही कारण है कि कॉन्फ़िगरेशन फ़ाइलों को नहीं रखना नकारात्मक है ... –

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