c# - (स्वचालित) निर्भरता इंजेक्शन बाध्यकारी तंत्र




.net dependency-injection (3)

इसे कन्वेंशन-आधारित कॉन्फ़िगरेशन या स्वत: पंजीकरण कहा जाता है और इन द्वारा समर्थित है.नेट डि कंटेनर:

डि कंटेनर्स के लिए इस्तेमाल होने वाले सबसे सामान्य विन्यास तंत्र हैं

  • एक्सएमएल
  • विन्यास के रूप में कोड
  • कन्वेंशन-आधारित कॉन्फ़िगरेशन

एक चौथा, लेकिन असामान्य, दृष्टिकोण विशेषताएँ का उपयोग करना है प्रबंधित एक्सटेन्सिबिलिटी फ्रेमवर्क इस दृष्टिकोण का सबसे प्रमुख उदाहरण है, जो जावा में अधिक आम है।

आईओसी कंटेनर के माध्यम से निर्भरता इंजेक्शन बाइंडिंग बनाने के लिए दो सामान्य तंत्र, एक XML कॉन्फ़िगरेशन या अनिवार्य कोड के एक ब्लॉक से है इन मामलों में, कुंजी मान जोड़ी स्पष्ट है (यानी कुंजी = अनुरोधित प्रकार, मान = लौटा दिया गया प्रकार)

फिर भी, एक तीसरा "अनुमानी" दृष्टिकोण है जहां एक आवेदन / आईओसी कंटेनर को केवल [आईएमक्लास्ट] की चाबियाँ दी जाती हैं और कंटेनर तब सभी नाम-मिलानयुक्त कंक्रीट वर्गों [मैक्लस] को खोजने के लिए आवेदन असेंबली निर्भरताओं के एक सेट पर प्रतिबिंबित करता है। अलग ढंग से कहा गया है, "वापसी प्रकार" मान घोषित किए जाने के बजाए खोज किए जाते हैं।

मुझे जो जानना है, वह दो गुणा है:

  1. कौन सी आईओसी कंटेनर (या अन्य देर से बाध्यकारी उपकरण) अनुमानिक दृष्टिकोण की अनुमति देते हैं? क्या इस दृष्टिकोण का अधिक सामान्य नाम है?
  2. क्या अन्य बाध्यकारी तकनीकें हैं, जो मैंने सूचीबद्ध तीनों के अलावा, जो अभ्यास में इस्तेमाल की जाती हैं?

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

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

चूंकि आप ओवरआइड कर सकते हैं कि आईओसी के कंटेनरों को बाँध कैसे करना है, आप अन्य व्यवहारों को भी पेश कर सकते हैं। आम तौर पर, हालांकि, वास्तव में दो विकल्प हैं:

  1. रन-टाइम पर कॉन्फ़िगर करें (कॉन्फ़िगरेशन फ़ाइलें जैसे कि XML फ़ाइलों के माध्यम से)
  2. संकलन-समय पर कॉन्फ़िगर करें (या तो एक घोषणात्मक डीएसएल-जैसी एपीआई के माध्यम से या कस्टम कन्वेंशन या कस्टम लॉजिक का दूसरा रूप)

मैं आमतौर पर जो आप congiguration में एक कस्टम कदम के रूप में वर्णन किया था। एएएएआईआईके में कोई कंटेनर बॉक्स के बाहर प्रदान करने वाली कोई ऐसी रणनीति नहीं है (और मेरी राय में कंटेनर का हिस्सा नहीं है, लेकिन एक कॉन्फिगरैटिन सामान जो कंटेनर की जिम्मेदारी से बाहरी होना चाहिए)।







late-binding