2011-09-15 11 views
6

मैंने किया था इस तरह मेरी विन्यास:संरचना मैप, कंटेनर या ऑब्जेक्टफैक्टरी का उपयोग करके कॉन्फ़िगर करें?

var container = new Container(x => 
               { 
                x.For<IEngine>().Use<V6Engine>(); 
                x.For<ICar>().Use<HondaCar>(); 
               } 
); 

तब मेरे MVC नियंत्रक कार्रवाई में मैंने किया था:

ICar car = ObjectFactory.GetInstance<ICar>(); 

मैं मेरे कंटेनर कंटेनर या ObjectFactory किसी भी तरह का उपयोग कर की स्थापना किया जाना चाहिए? यह हल नहीं किया, तो मैं एसी # सांत्वना आवेदन में चीजों को बाहर का परीक्षण किया और अगर मैं यह काम किया:

ICar car = container.GetInstance<ICar>(); 

लेकिन यह केवल काम करता है अगर कंटेनर स्थानीय दायरे में है, और एक वेब अनुप्रयोग में ऐसा नहीं है जाहिर है के बाद से बातें global.asax.cs में तार कर रहे हैं

उत्तर

0

मैं मिल गया है मेरा नीचे

Global.asax के रूप में विन्यस्त

ObjectFactory.Initialize(action => 
      { 
       action.For<ISomething>().Use<Something>; 
      }); 

हर जगह एन।

ObjectFactory.GetInstance<ISomething>(); 

हालांकि यह एकमात्र तरीका नहीं हो सकता है। इसके अलावा मुझे लगता है कि आप के लिए देख रहा हो सकता है

Scan(scanner => 
     { 
      scanner.AssemblyContainingType(....); 
      scanner.AddAllTypesOf(....); 
     } 
+3

बीटीडब्ल्यू: ऑब्जेक्टफैक्टरी से सीधे ऑब्जेक्ट खींचना एक विरोधी पैटर्न है ... –

+1

हाय मैं खुद को नक्शा बनाने के लिए बहुत नया हूं - मैंने सोचा था कि अगर आप ऑब्जेक्टफैक्टरी का उपयोग करना चाहते हैं तो यह केवल एक विरोधी पैटर्न था। गेटइन्स्टेंस एक पैरामीटर रहित कन्स्ट्रक्टर में कहता है इसे पैरामीटर के माध्यम से पारित करने और आईओसी कंटेनर काम करने दें? क्या आप थोड़ा और अधिक elabourate कर सकते हैं क्योंकि मैं बुरा खरगोश लेने के लिए नहीं चाहता। आईएस सेवा सेवा = ऑब्जेक्टफैक्टरी.गेट इंस्टेंस () जैसी सरल कॉल हैं; ठीक है अगर दो तत्वों को कसकर जोड़ना नहीं है? – Glenit

3

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

वैकल्पिक रूप से, यदि आप स्वयं कंटेनर के जीवनकाल को प्रबंधित करना चाहते हैं, तो आप कंटेनर का प्रारंभिक अभिव्यक्ति पारित करने वाले कंटेनर का एक उदाहरण बना सकते हैं। फिर आप कंटेनर को स्टोर करने के लिए घोषित वैरिएबल से इंस्टेंस पुनर्प्राप्त करते हैं।

आपके उदाहरण में, आप दो दृष्टिकोणों को मिश्रित कर रहे हैं, जो काम नहीं करते हैं।

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