5

मैं इसके लिए बहुत नया हूं, इसलिए मेरे साथ भालू।निर्भरता इंजेक्शन

मेरे पास सेवा/रिपोजिटरी/ईएफ 4 पैटर्न का उपयोग कर एक एमवीसी ऐप है और मैं निनजेक्ट का उपयोग करने की कोशिश कर रहा हूं। मैं इसे नियंत्रकों पर काम कर रहा हूं, वे कन्स्ट्रक्टर सेवाओं के साथ इंजेक्शन कर रहे हैं, लेकिन सेवाएं कन्स्ट्रक्टर के साथ इंजेक्शन वाले कंस्ट्रक्टर हैं और मुझे यकीन नहीं है कि इसे कहां संभालना है।

मैं इसे बनाने की कोशिश कर रहा हूं ताकि प्रत्येक परत केवल नीचे की परत के बारे में जान सके, क्या यह सही है? यदि हां, तो MVC अनुप्रयोग केवल सेवा परत के जानता है, और सेवा परत केवल भंडार परत, आदि तो मेरी Ninject मॉड्यूल में जहां मैं बाइंडिंग बनाने रहा हूँ के बारे में जानता है, मैं नहीं कह सकता:

Bind(Of IRepository(Of Category)).To(Of EFRepository(Of Category)) 

मैं इंजेक्शन कहां से संभाल सकता हूं?

+0

http://jeffreypalermo.com/blog/the-onion-architecture-part-1/ –

+0

संबंधित: http://stackoverflow.com/questions/4570750/dependency-injection-turtles-all-the- रास्ता-नीचे –

+0

डुप्लिकेट: http://stackoverflow.com/questions/1475575/where-should-i-do- निर्भरता- इंजेक्शन-with-ninject-2 –

उत्तर

7

आपके प्रश्न की टिप्पणियां वास्तव में कुछ उपयोगी जानकारी प्रदान करती हैं।

मैं आमतौर पर पूरा करने के लिए आप किस बारे में बात कर रहे हैं इस तरह बातें व्यवस्थित - यह यह का ही हिस्सा है निर्भरता इंजेक्शन के लिए सीधे लागू होने वाला:

  • मैं एक परियोजना के लिए मेरी दृश्य स्टूडियो समाधान की स्थापना/विधानसभा आवेदन में प्रति परत। इसे इस तरह से रखने के लिए, आपको उस परत को कॉल करने में सक्षम होने के लिए एक परत की परियोजना से दूसरे संदर्भ में एक संदर्भ सेट करना होगा। तो उदाहरण के लिए, आपने एमवीसी ऐप परत से सेवा परत पर एक संदर्भ स्थापित किया है, लेकिन एमवीसी ऐप से रिपोजिटरी परत तक नहीं, एमवीसी ऐप को सीधे रिपोजिटरी परत तक पहुंचने से रोकने के लिए।
  • प्रत्येक परत की परियोजना के भीतर, मैंने इंटरफेस और कक्षाओं को प्रोजेक्ट के शीर्ष नेमस्पेस में उपयोग किया जाना चाहिए, और इंटरफेस और अन्य वर्गों के वास्तविक कार्यान्वयन को एक उप-नेमस्पेस में छुपाया जाना चाहिए, जिसे आम तौर पर "इंपल" कहा जाता है। या कुछ इस तरह का; थीस कक्षाओं को "आंतरिक" के रूप में भी घोषित किया जाता है, जो सुनिश्चित करता है कि उन्हें केवल असेंबली (परत) के भीतर से उपयोग किया जा सकता है, न कि किसी अन्य परत से गलती से।
  • प्रत्येक प्रोजेक्ट/लेयर एक एन इंजेक्ट मॉड्यूल घोषित करता है जो आंतरिक कार्यान्वयन कक्षाओं में सार्वजनिक इंटरफेस को बांधता है।
  • अपने आवेदन की संरचना रूट पर (मार्क सीमन का लिंक देखें: Where should I do Injection with Ninject 2+ (and how do I arrange my Modules?)), आप एक कर्नेल बनाते हैं जो इन मॉड्यूल को लोड करता है।
  • वास्तविक इंजेक्शन ज्यादातर कन्स्ट्रक्टर इंजेक्शन के साथ किया जाता है, जिसका अर्थ यह है कि कक्षाएं स्वयं इंजेक्शन लेने के बारे में कुछ भी नहीं जानती हैं (कभी-कभी आपको [इंजेक्ट] विशेषता का उपयोग करना पड़ता है, यदि आपके पास अस्पष्ट रचनाकार हैं)।
+0

इसलिए प्रत्येक प्रोजेक्ट ** में ** एक निंजा मॉड्यूल होना चाहिए युग्मन को ढीला रखने के लिए अगली परत के लिए बाइंडिंग को कॉन्फ़िगर करता है? फिर ऐप की जड़ (Global.asax) कर्नेल को इन सभी के साथ कॉन्फ़िगर करती है? मैं थोड़ी उलझन में हूं कि एमवीसी ऐप कभी रिपोजिटरीइन इंजेक्ट मॉड्यूल के बारे में कैसे जान पाएगा? – Sam

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