2012-03-26 13 views
6

मैं ऐसे अनुप्रयोग पर काम कर रहा हूं जिसमें कई मॉड्यूल शामिल हैं, जिनमें कुछ मॉड्यूल पर निर्भरता है। अब मैंने सर्कुलर निर्भरताओं को हल करने और सामान्य रूप से वास्तुकला में सुधार करने के लिए ऑटोफैक का उपयोग करने का निर्णय लिया है।ऑटोफैक - बहु मॉड्यूल अनुप्रयोग में सही उपयोग

ऑटोफैक कॉन्फ़िगर करने के लिए मैं xml विधि (http://code.google.com/p/autofac/wiki/XmlConfiguration) का उपयोग करता हूं।

अब मुझे ऑटोफैक को कार्यान्वित करने के बारे में निश्चित नहीं है। क्या मुझे अपने आवेदन में प्रत्येक मॉड्यूल में ऑटोफैक का संदर्भ होना चाहिए? मतलब है कि हर बार जब मैं एक निर्भरता को हल करना चाहता हूं तो मुझे सभी घटकों को पंजीकृत करना होगा ...

ContainerBuilder builder = new ContainerBuilder(); 
builder.RegisterModule(new ConfigurationSettingsReader("autofac", configPath)); 
IContainer container = builder.Build(); 
IWhatever w = container.Resolve<IWhatever>(); 

क्या ऐसा करने का यह तरीका है?

या क्या एक अलग मॉड्यूल में ऑटोफ़ैक लपेटना बेहतर है? इस दृष्टिकोण मैं केवल एक बार मॉड्यूल रजिस्टर करने के लिए (जब आवेदन शुरू होता है) के लिए होता है और बस निर्भरता को हल करने लिपटे Autofac इस्तेमाल कर सकते हैं के साथ ...

IWhatever w = container.Resolve<IWhatever>(); 

मुझे आशा है कि कोई मुझे का उपयोग करने के लिए सबसे अच्छा तरीका बता सकते हैं Autofac।

धन्यवाद!

+2

Autofac (या किसी अन्य डि कंटेनर) उपयोग करने के लिए सबसे अच्छा तरीका है इसे आवश्यक रूप से आवश्यक रूप से संदर्भित करने के लिए। [यह उत्तर] (http://stackoverflow.com/a/1410738/644812) सहायक हो सकता है। –

+0

धन्यवाद, यही वह है जो मैं भी सोच रहा हूं। मुझे यकीन नहीं है कि ऑटोफैक का उपयोग करने का सबसे अच्छा अभ्यास क्या है ... – Fabian

उत्तर

7

यदि आप ऑटोफैक मॉड्यूल का उपयोग करना चाहते हैं तो प्रत्येक प्रोजेक्ट को ऑटोफैक कोर पैकेज पर निर्भरता की आवश्यकता होती है।

उपयोग autofac मॉड्यूल को यहां बताए गए: http://code.google.com/p/autofac/wiki/StructuringWithModules

अद्यतन

मैं का वर्णन तुम क्यों मॉड्यूल यहाँ का उपयोग करना चाहिए: http://www.codeproject.com/Articles/386164/Get-injected-into-the-world-of-inverted-dependenci

-1

कंटेनर के लिए अलग मॉड्यूल न केवल एक बेहतर विकल्प है, यह एकमात्र सही विकल्प है। AFAIK आईओसी कंटेनर उदाहरण सिंगलेट होना चाहिए।

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

+4

नहीं, नहीं और नहीं। एक सिंगलटन (कुछ भी) होने के कारण शायद ही कभी एक अच्छा विचार है। ज्यादातर मामलों में एक बेहतर समाधान है। इधर भी ऐसा ही है। – jgauffin

+0

और यह कौन सा है, आपने एक प्रदान नहीं किया है? आप प्रत्येक मॉड्यूल में प्रश्न में दिए गए कोड का उपयोग नहीं कर सकते क्योंकि इससे बहुत अधिक ओवरहेड बन जाएगा। मुझे निश्चित रूप से पता नहीं है, लेकिन यह संभव है कि बिल्डर को बुलाएं। बिल्डर कंटेनर में सभी ऑब्जेक्ट्स को तुरंत चालू करता है - बहुत बुरा विचार। – vlad2135

+2

बहुत सारे ओवरहेड? कंटेनर एक बार आवेदन जीवनकाल में बनाया गया है। – jgauffin