2010-02-24 13 views
7

में संग्रह संग्रह मैं ऑटोफैक 1.4 से 2.1.10 रिलीज उम्मीदवार से कोड को अपग्रेड कर रहा हूं।ऑटोफैक 2.1.10 आरसी

मेरे मॉड्यूल इस तरह पहले से प्रदर्शन किया पंजीकरण:

builder.RegisterCollection<IExceptionHandler>() 
       .As<IEnumerable<IExceptionHandler>>() 
       .FactoryScoped(); 
builder.Register<AspNetExceptionHandler>() 
       .As<IExceptionHandler>() 
       .MemberOf<IEnumerable<IExceptionHandler>>() 
       .FactoryScoped(); 

अब, RegisterCollection कोई parameterless अधिभार नहीं है। मुझे इसे नाम देने के बारे में परवाह नहीं है। मान लिया जाये कि यह सिर्फ null में पारित करने के लिए ठीक है, मेरे कोड 2.1 में इस तरह दिखता है:

builder.RegisterCollection<IExceptionHandler>(null) 
       .As<IEnumerable<IExceptionHandler>>() 
       .InstancePerDependency(); 
builder.RegisterType<AspNetExceptionHandler>() 
       .As<IExceptionHandler>() 
       .MemberOf<IEnumerable<IExceptionHandler>>(null) 
       .InstancePerDependency(); 

हालांकि, जब मैं संकलन, मैं .MemberOf के बारे में निम्नलिखित त्रुटि मिलती है:

सामान्य विधि 'का उपयोग करना Autofac.RegistrationExtensions.MemberOf (Autofac.Builder.RegistrationBuilder, स्ट्रिंग) 'की आवश्यकता है' 3 'प्रकार तर्क

मैं एक संग्रह में डालने की कोशिश की शून्य के बजाय नाम, बस मामले में, और इसका कोई प्रभाव नहीं पड़ा।

2.1 में संग्रह पंजीकृत करने का सही तरीका क्या है?

उत्तर

6

जैसा कि मैं इसे समझता हूं, आप बस IExceptionHandler प्रकारों का एक समूह पंजीकृत करते हैं, और फिर जब आप IEnumerable<IExceptionHandler> का अनुरोध करते हैं तो ऑटोफ़ैक 2 केवल आपके लिए सबकुछ का ख्याल रखेगा।

NewInV2 पृष्ठ से

:

builder.RegisterType<A1>().As<IA>(); 
builder.RegisterType<A2>().As<IA>(); 

var container = builder.Build(); 

// Contains an instance of both A1 and A2 
Assert.AreEqual(2, container.Resolve<IEnumerable<IA>>().Count()); 
+0

हाँ, बस इतना ही :) –

+1

मैं नहीं जानता कि मैं कैसे NewInV2 पर याद किया कि। धन्यवाद, यह काम प्रतीत होता है। मैं सोच रहा हूं, हालांकि, अगर मैं * चाहता हूं तो मैं एक नामित संग्रह कैसे बनाऊंगा। – HackedByChinese

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