मैं एक Autofac मॉड्यूल जो निम्नलिखित (कांट छांट) लोड ओवरराइड में तर्क दिया गया है:बंद करो Autofac मॉड्यूल पंजीकरण पहले से पंजीकृत घटकों
protected override void Load(ContainerBuilder builder)
{
foreach (var componentType in allTypesInAllAvailableAssemblies) // Set elsewhere
{
var handlerInterfaces = componentType.GetInterfaces().Where(i => i.IsClosedTypeOf(typeof(IMessageHandler<>)));
if (handlerInterfaces.Any())
builder.RegisterType(componentType).As(handlerInterfaces);
}
}
यह किसी भी वर्ग है कि अपने आप में एक संदेश हैंडलर वाणी की तलाश में है और सभी इमेजेज के खिलाफ इसे पंजीकृत करता है हैंडलर इंटरफेस इसे लागू करता है।
मैं क्या करना चाहता हूं घटक पंजीकृत है यदि यह पहले से ही पंजीकृत है। बोनस के रूप में, यह आदर्श होगा यदि मैं संदेश हैंडलर इंटरफेस (ओं) के खिलाफ हल करने के लिए मौजूदा पंजीकरण को अद्यतन कर सकता हूं, यदि यह पहले से नहीं है।
तर्क की खातिर यह है कि इस कोड के बाद अन्य सभी प्रकार के पंजीकरण किया गया है (संभव संदेश हैंडलर उम्मीदवारों सहित) चलेंगे
मैं में पंजीकरण हेरफेर के लिए AttachToComponentRegistration
ओवरराइड का उपयोग किया है माना जा सकता है के लिए अतीत लेकिन ऐसा लगता है कि यह इस परिदृश्य में उपयोगी नहीं है।
क्या यह संभव है या क्या मुझे अपने डिजाइनरों और बल प्लगइन पर पुनर्विचार करना चाहिए ताकि वे स्पष्ट रूप से अपने हैंडलर घोषित कर सकें?
क्या आपने AnyConcreteTypeNotAlreadyRegisteredSource क्लास का उपयोग करने का प्रयास किया है?देखें: http://stackoverflow.com/questions/3413660/ –