2010-08-05 9 views
11

के इस परिदृश्य मान लीजिए:ऑटोफैक कंटेनर हल करने से पहले प्रत्येक कक्षा को पंजीकृत करना होगा?

public class B {}; 

public class C 
{ 
    public C(B b){} 
} 

Autofac कंटेनर से सी हल करने के लिए, मैं दोनों बी और सी कंटेनर के लिए रजिस्टर करने के लिए है। लेकिन, आज मैंने Unity का उपयोग किया, ऐसा लगता है कि मुझे बी को कंटेनर में पंजीकृत करने की आवश्यकता है, फिर सी को हल किया जा सकता है।

तो ऑटोफैक यूनिटी के रूप में नहीं कर सकता है?

उत्तर

20

आउट ऑफ़ द बॉक्स के साथ ऑटोफैक यह अपेक्षा की जाती है कि आप जिस प्रकार का उपयोग करना चाहते हैं वह कंटेनर के साथ पंजीकृत है, या तो सीधे Register... विधियों या RegisterAssemblyTypes का उपयोग करके थोक में। लेकिन अन्य विकल्प भी हैं, Nicholas article about resolving everything पर एक नज़र डालें। तो हाँ, ऑटोफैक क्या कर सकता है जो यूनिटी करता है, लेकिन आपको इसे सक्षम करना होगा।

अद्यतन: वास्तव में, "कुछ भी हल" सुविधा अंतर्निहित होता है अब, और आप निम्न कर सकते हैं: किसी भी पंजीकरण किए बिना

 var cb = new ContainerBuilder(); 
     cb.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource()); 
     return cb.Build(); 
AnyConcreteTypeNotAlreadyRegisteredSource आप वास्तव में दोनों C और B हल कर सकते हैं के साथ

उनमें से।

ध्यान दें कि AnyConcreteTypeNotAlreadyRegisteredSource द्वारा हल की गई सेवाओं का जीवनकाल "per dependency scope" होगा।

नोट:this topic ऑटोफैक चर्चा समूह से संबंधित है।

+0

धन्यवाद। यह चर्चा समूह में मेरा सवाल है। – Benny

+0

AnyConcreteTypeNotAlreadyRegisteredSource – JJS

+0

@JJS का डिफ़ॉल्ट जीवनकाल क्या है - यह ऑटोफ़ाक-इन-सामान्य डिफ़ॉल्ट जीवनकाल होगा, जो "प्रति निर्भरता क्षेत्र" (रेफरी https://code.google.com/p/autofac/wiki/InstanceScope है)) –

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