2010-06-23 16 views
6

यूनिटी को कॉन्फ़िगर करने के लिए यूनिटी इंजेक्शन कॉन्फ़िगर करें ताकि कुछ बेस क्लास से प्राप्त कोई भी वर्ग आधार वर्ग के लिए परिभाषित इंजेक्शन पाइपलाइन के माध्यम से जा सके।कुछ बेस क्लास

public abstract class Base 
{ 
    public IDependency Dependency {get;set;} 
}; 

public class Derived1: Base 
{ 
}; 

public class Derived2: Base 
{ 
}; 


container.RegisterType<Base>(new InjectionProperty("Dependency", new ResolvedParameter<IDependency>())); 
var d1 = container.Resolve<Derived1>(); 

इस प्रकार, मैं एकता के साथ रजिस्टर आधार वर्ग करने की जरूरत है, जबकि संकल्प व्युत्पन्न वर्ग ताकि आधार वर्ग के लिए निर्दिष्ट सभी इंजेक्शन व्युत्पन्न वर्ग पर लागू किया जाएगा।

DependencyAttribute के साथ सजावटी बेस क्लास संपत्ति को मेरे प्रोजेक्ट प्रतिबंधों के कारण अनुमति नहीं है।


Mirror of the question on Unity's codeplex site

+2

जो आप खोज रहे हैं उसे * ऑटो-पंजीकरण *, * स्कैनिंग * या * सम्मेलन-आधारित पंजीकरण * कहा जाता है। कई डी कंटेनर (जैसे कैसल विंडसर और स्ट्रक्चर मैप) इसका समर्थन करते हैं, लेकिन एकता नहीं है। क्या मैं एक बेहतर डी कंटेनर की सिफारिश कर सकता हूं? –

+0

धन्यवाद, लेकिन मुझे डर है कि इस पल में किसी अन्य डी ढांचे पर स्विच करना संभव नहीं है। असल में, मैं अपने सभी वंशजों के स्वचालित पंजीकरण के बजाय स्मार्ट बिल्डअप की तलाश में हूं। बेशक, ऑटो पंजीकरण मुझे भी अपना लक्ष्य प्राप्त करने देगा। लेकिन खाते में विरासत लेना मुझे लगता है कि अधिक उचित व्यवहार होगा। –

+0

शायद आपको यह संबंधित प्रश्न (और उसका उत्तर) उपयोगी लगेगा: http://stackoverflow.com/questions/1769056/does-ms-pnp-unity-scan-for-assemblies-like-structuremap –

उत्तर

6
var container = new UnityContainer(); 
container 
    .RegisterType<IDependency, Dependency1>() 
    .RegisterTypes(
     AllClasses 
      .FromAssemblies(Assembly.GetExecutingAssembly()) 
      .Where(t => typeof(Base).IsAssignableFrom(t)), 
     getInjectionMembers: _ => new[] { new InjectionProperty("Dependency") }); 
var d1 = container.Resolve<Derived1>(); 

नोट: यदि आप एकता 3 कि Registration by convention का समर्थन करता है की जरूरत है।

+0

मैं साल 2010 में इसका सपना देख रहा था :) –

संबंधित मुद्दे