-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的实现之间切换,请考虑编写一个定制工厂,该工厂总是会返回您所需的实现。