-1

有2個類實現相同的接口,如何註冊它們? 首次登記工作得很好:註冊2同一類的實現

iocContainer.Register<IEcContract, EcContract>(Lifestyle.Transient); 

但是,如果我用相同的接口寄存器的第二類,它拋出一個錯誤。我正在使用簡單注射器。

+3

你能否給我們提供一個'Simple Inversion'的鏈接?我不知道這樣一個IoC容器。 _你的意思是'Simple Injector'?_ – mjwills

+0

'但是如果我用相同的接口註冊第二個類,它會拋出一個錯誤。「它拋出了什麼**精確**異常? – mjwills

+2

[單個接口註冊多個實現]的可能重複(https://stackoverflow.com/questions/17889385/register-multiple-implementations-with-single-interface) – mjwills

回答

0

我不知道這個IoC容器,但其他人使用的方案是這樣的:

container.RegisterCollection<IEcContract>(new[] { typeof(EcContract), typeof(OtherClass)}); 

也許檢查文檔的IoC容器,看看是否有一個RegisterCollection(或類似)的方法。

1

你對容器有什麼期望?它應該返回哪個實例?

如果由於某種原因需要解析所有實例(在集合中),請參閱swatsonpicken的答案。

如果你需要一個特定的實現,你需要一種方法來決定哪一個。

一些DI庫允許您命名實例,然後向容器請求其中一個命名實例。簡單的注射器does not support it

因此,如果您需要在使用Simple Injector的實現之間切換,請考慮編寫一個定製工廠,該工廠總是會返回您所需的實現。