यह संभव है, लेकिन आप कुछ समाधान लागू करने के लिए की जरूरत है। सबसे पहले आपको प्रत्येक आईपर्सर को यूनिटी कंटेनर में नाम के साथ पंजीकृत करने की आवश्यकता है। दूसरा आपको कंटेनर में आईपर्सर [] से आईनेमेरेबल < आईपर्सर > से मैपिंग पंजीकृत करने की आवश्यकता है। अन्यथा कंटेनर निर्माता को पार्सर्स इंजेक्ट नहीं कर सकता है। यहां बताया गया है कि मैंने इसे पहले कैसे किया है।
IUnityContainer container = new UnityContainer();
container.RegisterType<IParser, SuperParser>("SuperParser");
container.RegisterType<IParser, DefaultParser>("DefaultParser");
container.RegisterType<IParser, BasicParser>("BasicParser");
container.RegisterType<IEnumerable<IParser>, IParser[]>();
container.RegisterType<Crawler>();
Crawler crawler = container.Resolve<Crawler>();
मैं एक कारखाने शुरू करने से इस समाधान को त्याग दिया, कि जरूरत प्रकार के निर्माण के लिए एकता समाहित। यहां बताया गया है कि मैं इसे अपने मामले में कैसे करूंगा।
public interface IParserFactory{
IEnumerable<IParser> BuildParsers();
}
public class UnityParserFactory : IParserFactory {
private IUnityContainer _container;
public UnityParserFactory(IUnityContainer container){
_container = container;
}
public IEnumerable<IParser> BuildParsers() {
return _container.ResolveAll<IParser>();
}
}
public class Crawler {
public Crawler(IParserFactory parserFactory) {
// init here...
}
}
इस के साथ
आप इस प्रकार प्रकार रजिस्टर कर सकते हैं:
IUnityContainer container = new UnityContainer();
container.RegisterType<IParser, SuperParser>();
container.RegisterType<IParser, DefaultParser>();
container.RegisterType<IParser, BasicParser>();
container.RegisterType<IParserFactory, UnityParserFactory>();
Crawler crawler = container.Resolve<Crawler>();
संभावित डुप्लिकेट [एकता के साथ IENumerable को हल करना] (http://stackoverflow.com/questions/1961549/resolving-ienumerablet-with-unity) –