2010-10-23 16 views
28

मैं कंटेनर के साथ टाइपटाइप कैसे करूं जहां टाइप में कोई पैरामीटर कन्स्ट्रक्टर नहीं है।पंजीकरण कैसे करें पैरामीटर कन्स्ट्रक्टर के साथ टाइप करें?

वास्तव में मेरा कन्स्ट्रक्टर एक स्ट्रिंग स्वीकार करता है, और मैं आमतौर पर एक स्ट्रिंग में जाता हूं जो पथ का प्रतिनिधित्व करता है।

तो जब मैं हल करता हूं तो यह स्वचालित रूप से नया प्रकार बनाता है लेकिन एक स्ट्रिंग में गुजरता है?

उत्तर

52

यह आसान है। जब आप कन्स्ट्रक्टर पंजीकृत करते हैं, तो आप केवल उस मान को पास करते हैं जिसे आप पैरामीटर के लिए इंजेक्शन देना चाहते हैं। कंटेनर मूल्य (एपीआई) या पैरामीटर (एक्सएमएल) के नाम के आधार पर आपके कन्स्ट्रक्टर से मेल खाता है।

एपीआई में, आप क्या करना चाहते हैं:

container.RegisterType<MyType>(new InjectionConstructor("My string here")); 

कि एक निर्माता है कि एक एकल स्ट्रिंग लेता है, और संकल्प समय में चुन लिए जाएँगे स्ट्रिंग "मेरे यहाँ स्ट्रिंग" पारित करेंगे।

समान XML (2.0 config स्कीमा का उपयोग करके) होगा:

<register type="MyType"> 
    <constructor> 
    <param name="whateverParameterNameIs" value="My string here" /> 
    </constructor> 
</register> 
+0

धन्यवाद, बस मुझे जो चाहिए था। – Martin

14

तुम भी InjectionConstructor और ResolvedParameter में बनाया का उपयोग कर सकते हैं जहां connectionstring डेटाबेस कनेक्शन प्रयोग की जाने वाली स्ट्रिंग है।

// install a named string that holds the connection string to use 
container.RegisterInstance<string>("MyConnectionString", connectionString, new ContainerControlledLifetimeManager()); 

// register the class that will use the connection string 
container.RegisterType<MyNamespace.MyObjectContext, MyNamespace.MyObjectContext>(new InjectionConstructor(new ResolvedParameter<string>("MyConnectionString"))); 

var context = container.Resolve<MyNamespace.MyObjectContext>(); 

आप यह भी एक कदम आगे ले और प्रत्येक अलग डेटाबेस के लिए अपने स्वयं के कनेक्शन स्ट्रिंग का उपयोग कर, MyObjectContext के कई नामित उदाहरण हो सकता है।

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