पर विचार को लागू करने के सभी पंजीकृत वस्तुओं की एक सूची प्राप्त करें।एक निश्चित इंटरफ़ेस
अब मैं ISomeInterface
को लागू करने वाली सभी पंजीकृत वस्तुओं में से IEnumerable
प्राप्त करना चाहता हूं।
मैं इसे ऑटोफैक में कैसे पूरा कर सकता हूं?
पर विचार को लागू करने के सभी पंजीकृत वस्तुओं की एक सूची प्राप्त करें।एक निश्चित इंटरफ़ेस
अब मैं ISomeInterface
को लागू करने वाली सभी पंजीकृत वस्तुओं में से IEnumerable
प्राप्त करना चाहता हूं।
मैं इसे ऑटोफैक में कैसे पूरा कर सकता हूं?
बस इस की कोशिश की, काम करता है और जीवन भर के संदर्भ पर निर्भर नहीं करता:
IEnumerable<ISomeInterface> lst = types.Select(t => con.Resolve(t) as ISomeInterface);
अच्छा। मेरे कार्यान्वयन से क्लीनर। – kasperhj
आप
container.Register(c => new A()).As<ISomeInterface>();
container.Register(c => new B()).As<ISomeInterface>();
है, तो फिर जब आप कर
var classes = container.Resolve<IEnumerable<ISomeInterface>>();
आप एक चर कि ISomeInterface की एक सूची है, ए और बी युक्त
यहाँ है मैं कैसे किया मिलेगा यह।
var l = Container.ComponentRegistry.Registrations
.SelectMany(x => x.Services)
.OfType<IServiceWithType>()
.Where(x =>
x.ServiceType.GetInterface(typeof(ISomeInterface).Name) != null)
.Select(c => (ISomeInterface) c.ServiceType);
यह मेरे लिए काम नहीं करता है - 'System.InvalidCastException: 'के साथ' चयन 'खंड में विफल रहता है' MyCompany.Communications 'टाइप करने के लिए' System.RuntimeType 'प्रकार का ऑब्जेक्ट डालने में असमर्थ। Core.ICommunicationService '।' '। – Tagc
Autofac नहीं करता है: बजाय
फिर हल करने उत्प्रेरक का उपयोग कर
की गणना प्रकार वास्तव में आप जो भी पूछ रहे हैं उसका समर्थन करने में सहायता करते हैं। यदि आप पंजीकरण नहीं बदल सकते हैं, तो आप को हो सकता है। रजिस्ट्रेशन के संग्रह के खिलाफ किसी भी प्रश्न को करने से जरूरी नहीं है कि डायनामिक पंजीकरण स्रोत (जिनमें से कुछ कंटेनर में स्वचालित रूप से पंजीकृत हों - 'IENumerable 'जैसी चीजों का समर्थन करने के लिए)। आप जो क्वेरी से बाहर निकलते हैं वह पूरी सूची नहीं हो सकता है। –