के लिए ऑटोफैक स्कैनिंग असेंबली मैंने ऑटोफैक का उपयोग करना शुरू कर दिया है और कुछ डीएलएल स्कैन करना चाहते हैं और ऑटोफैक को उनके भीतर कुछ कक्षाओं को पंजीकृत करने के लिए प्राप्त करना चाहते हैं।कुछ वर्ग प्रकार
कक्षाएं जिन्हें मैं सभी प्लगइनबेस वर्ग से प्राप्त करता हूं, लेकिन नीचे दिया गया कोड उन्हें पंजीकृत नहीं कर रहा है। क्या कोई मदद कर सकता है?
builder
.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
.Where(t => t.GetInterfaces()
.Any(i => i.IsAssignableFrom(typeof (IDependency))))
.AsImplementedInterfaces()
.InstancePerDependency();
इस कोड में मैं IDependency
एक मार्कर इंटरफेस के रूप में उपयोग करें:
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
var builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(assemblies)
.Where(t => t.BaseType == typeof(PluginBase))
.AsImplementedInterfaces()
.AsSelf();
var container = builder.Build();
var pluginClasses = container.Resolve<IEnumerable<PluginBase>>();
//pluginClasses is empty!!!!
अटक गया है! क्या मैं नए वर्गों के लिए असीमित इंटरफेस जोड़ सकता हूं जो इंटरफेस को कार्यान्वित करता है? – Jon
मुझे लगता है कि इन दो कॉलों को एकसाथ काम करना चाहिए। फिर प्रकार के साथ पंजीकृत हो जाता है I टीएस बेस प्रकार और यह सभी इंटरफेस लागू करता है। – Jehof
ओह, मैंने जो लिखा है उसे दोबारा पढ़ें और समझ में नहीं आता है। अगर मेरे पास एक कक्षा है जो प्लगइनबेस से विरासत में है और इसमें इंटरफ़ेस का कन्स्ट्रक्टर तर्क है तो यह AsImplementedInterfaces के साथ भी काम नहीं करेगा। क्या मैं एक नया बिल्डर पंजीकरण करता हूं या क्या मैं वर्तमान कोड में संशोधन कर सकता हूं? – Jon