有2个类实现相同的接口,如何注册它们? 首次登记工作得很好:注册2同一类的实现
iocContainer.Register<IEcContract, EcContract>(Lifestyle.Transient);
但是,如果我用相同的接口寄存器的第二类,它抛出一个错误。我正在使用简单注射器。
有2个类实现相同的接口,如何注册它们? 首次登记工作得很好:注册2同一类的实现
iocContainer.Register<IEcContract, EcContract>(Lifestyle.Transient);
但是,如果我用相同的接口寄存器的第二类,它抛出一个错误。我正在使用简单注射器。
我不知道这个IoC容器,但其他人使用的方案是这样的:
container.RegisterCollection<IEcContract>(new[] { typeof(EcContract), typeof(OtherClass)});
也许检查文档的IoC容器,看看是否有一个RegisterCollection
(或类似)的方法。
你对容器有什么期望?它应该返回哪个实例?
如果由于某种原因需要解析所有实例(在集合中),请参阅swatsonpicken的答案。
如果你需要一个特定的实现,你需要一种方法来决定哪一个。
一些DI库允许您命名实例,然后向容器请求其中一个命名实例。简单的注射器does not support it。
因此,如果您需要在使用Simple Injector的实现之间切换,请考虑编写一个定制工厂,该工厂总是会返回您所需的实现。
你能否给我们提供一个'Simple Inversion'的链接?我不知道这样一个IoC容器。 _你的意思是'Simple Injector'?_ – mjwills
'但是如果我用相同的接口注册第二个类,它会抛出一个错误。“它抛出了什么**精确**异常? – mjwills
[单个接口注册多个实现]的可能重复(https://stackoverflow.com/questions/17889385/register-multiple-implementations-with-single-interface) – mjwills