2

我相對比較熟悉DI/IOC容器的概念,這些容器曾經在之前已經使用過的項目上工作過。但是,對於這個新項目,沒有現有的框架,我不得不挑選一個。長期以來,有一些場景我們將爲給定的接口配置幾個實現。縱觀網絡,似乎使用任何主流框架選擇性綁定到其中一個實現是非常簡單的。使用IOC框架綁定到多個具體實現?

然而,我們需要運行ALL配置的實現。我在這裏搜索了所有IOC標記的帖子,我試圖通過主要框架的文檔(到目前爲止看Unity,Ninject和Windsor),但文檔通常是稀疏的,我沒有時間檢查所有軟件包的來源。

那麼,是否有任何主流的IOC容器,允許我綁定到我的服務之一的所有配置的具體類型?

回答

3

的一件事是未命名的(默認)型註冊將來當你調用ResolveAll()返回。僅返回指定的實例。

所以:

IUnityContainer container = new UnityContainer(); 
container.RegisterType<IMyInterface, MyFirstClass>(); 
container.RegisterType<IMyInterface, MySecondClass>("Two"); 
container.RegisterType<IMyInterface, MyThirdClass>("Three"); 

var instances = container.ResolveAll<IMyInterface>(); 

Assert.AreEqual(2, instances.Count, "MyFirstClass doesn't get constructed");