Autofac की वर्तमान versons के लिए: (2.0+, इसलिए कुछ भी आप का उपयोग करना चाहिए आज)
आप एक से अधिक ILoggers
(उदाहरण के लिए) रजिस्टर:
var builder = new ContainerBuilder();
builder.Register<ConsoleLogger>()
.As<ILogger>();
builder.Register<EmailLogger>()
.As<ILogger>()
.PreserveExistingDefaults(); //keeps console logger as the default
तब मिलता है सब ILogger
रों:
var loggers = container.Resolve<IEnumerable<ILogger>>();
तुम बस एकके लिए पूछना, कुछ भी विशेष करने की जरूरत नहीं है वांछित प्रकार के 0। Autofac में अन्य adapters के साथ बॉक्स के बाहर संग्रह समर्थन है जो आपके घटकों को अतिरिक्त कार्यक्षमता के साथ लपेट सकता है। ।
इससे इस बीमारी के 2.x ImplicitCollectionSupportModule के रूप में ही उपयोग है, लेकिन सही में पकाया
पुराने संस्करणों के लिए (0.X - 1,4)
दो तरीके:
1) का प्रयोग संग्रह पंजीकरण
var builder = new ContainerBuilder();
builder.RegisterCollection<ILogger>()
.As<IEnumerable<ILogger>>();
builder.Register<ConsoleLogger>()
.As<ILogger>()
.MemberOf<IEnumerable<ILogger>>();
builder.Register<EmailLogger>()
.As<ILogger>()
.MemberOf<IEnumerable<ILogger>>();
तब:
var loggers = container.Resolve<IEnumerable<ILogger>>();
जो आपको एक IENumerable देता है।
या 2) आप जो Autofac के नए संस्करण की तरह कोड काम कर देगा ImplicitCollectionSupport मॉड्यूल, का उपयोग कर सकते हैं:
builder.RegisterModule(new ImplicitCollectionSupportModule());
builder.Register(component1).As<ILogger>;
builder.Register(component2).As<ILogger>;
फिर बल्कि सभी को हल करने के लिए देख रहा से ILogger का एक संग्रह को हल।
var loggers = container.Resolve<IEnumerable<ILogger>>();
जो आपको एक आईनेमरेबल देता है, फिर से।
कोई कारण, जिसे आप साझा करना चाहते हैं, क्यों आप विंडसर से ऑटोफैक तक जा रहे हैं? –
चीज जो मैं वास्तव में ऑटोफैक के साथ पसंद करता हूं वह लैमडा अभिव्यक्तियों के माध्यम से गतिशील घटक निर्माण को व्यक्त करने में सक्षम है।ऑटोवॉयरिंग के विरोध में अभिव्यक्तियों का उपयोग करके कंटेनर एक प्रकार का समाधान करते समय "कर रहा है" की गलतफहमी के लिए कम जगह है (नोट: ऑटोफैक अगर आप चाहें तो ऑटोवॉयरिंग का समर्थन करता है)। अंत में विंडसर एपीआई इतनी बड़ी हो गई है कि हर संभावना को पूरा करने के लिए यह जटिलता की छाप देता है, जब आईओसी एक अवधारणा के रूप में वास्तव में काफी सरल है। यह नहीं कह रहा कि मैं कभी भी अन्य विकल्पों को आजमाने के लिए विंडसर का फिर से उपयोग नहीं करूंगा। – crowleym
मैंने विंडसर से ऑटोफैक में जाने पर विचार किया है। विंडसर का एपीआई उलझन में है। – Amy