2012-03-14 8 views
17

एकता का उपयोग के साथ सभी इंटरफ़ेस ऑटो रजिस्टर, मैं अपने आप एक विधानसभा इन नियमों का पालन के आधार पर सभी इंटरफेस/वर्ग संयोजन दर्ज करना चाहते हैं ।एकता

मैं इसके लिए निम्न विधि ने लिखा है:

private static IUnityContainer RegisterITypesOf(this IUnityContainer container, string assemblyName) 
{ 
    Assembly.Load(assemblyName) 
    .GetTypes() 
    .Where(t => t.GetInterfaces().Any(i => i.Name == "I" + t.Name)) 
    .ForEach(t => container.RegisterType(t.GetInterface("I" + t.Name, false), t)); 
    return container; 
} 

मेरा प्रश्न है:

  • वहाँ एक अंतर्निहित समारोह है कि एक ही करता है?
  • यदि नहीं, तो क्या मेरे कोड को प्रदर्शन के अनुसार बेहतर किया जा सकता है?

उत्तर

2

मैं वही चाहता था; सम्मेलन आधारित कॉन्फ़िगरेशन एला स्ट्रक्चरमैप, और आगे बढ़ गया और इसके लिए एक लाइब्रेरी बनाई। आप इसे NuGet पर डाउनलोड कर सकते हैं, और मेरे github page

पर कुछ दस्तावेज़ पढ़ सकते हैं उम्मीद है कि इससे मदद मिलती है!

+0

अच्छा lib! यह वही तरीका है, इसलिए मैं यह मानने जा रहा हूं कि यह करने का सबसे अच्छा तरीका है :) – David

12

यूनिटी 3.5.140.0 ने समान नाम वाले इंटरफेस को उस वर्ग के रूप में पंजीकृत करने के लिए कार्यक्षमता में बनाया है जो इसका उपयोग करता है।

public static void RegisterTypes(IUnityContainer container) 
{ 
    container.RegisterTypes(
    AllClasses.FromLoadedAssemblies(), 
    WithMappings.FromMatchingInterface, 
    WithName.Default); 
} 
+0

कुछ स्पष्टीकरण एक अच्छा विचार होगा ... – PiotrWolkowski

+1

कूल, जानना अच्छा है। स्पष्टीकरण के साथ ब्लॉगपोस्ट: http://blogs.msdn.com/b/agile/archive/2013/03/12/unity-configuration-registration-by-convention.aspx – David

+0

इसलिए आपको नामस्थान 'एकता। पंजीकरण ByConvention' शामिल करना चाहिए। – royalTS