Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 注册同一类的2个实现_C#_Dependency Injection_Inversion Of Control_Simple Injector - Fatal编程技术网

C# 注册同一类的2个实现

C# 注册同一类的2个实现,c#,dependency-injection,inversion-of-control,simple-injector,C#,Dependency Injection,Inversion Of Control,Simple Injector,如果有两个类实现相同的接口,如何注册它们? 第一次注册效果良好: iocContainer.Register<IEcContract, EcContract>(Lifestyle.Transient); iocContainer.Register(lifesture.Transient); 但是如果我用相同的接口注册第二个类,它会抛出一个错误。我使用的是Simple Injector。我不知道这个IoC容器,但其他人使用这样的方案: container.RegisterColle

如果有两个类实现相同的接口,如何注册它们? 第一次注册效果良好:

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

但是如果我用相同的接口注册第二个类,它会抛出一个错误。我使用的是Simple Injector。

我不知道这个IoC容器,但其他人使用这样的方案:

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

也许可以查看您的IoC容器的文档,看看是否有
RegisterCollection
(或类似的)方法。

您对该容器有什么期望?它应该返回哪个实例

如果出于某种原因需要解析(集合中的)所有实例,请参阅swatsonpicken的答案

如果您需要一个特定的实现,您需要一种方法来决定哪种实现

一些DI库允许您命名实例,然后向容器请求一个命名实例。简易注射器


因此,如果需要用简单的注入器来实现实现之间的转换,请考虑编写一个自定义工厂,它总是返回您需要的实现。< / P>您能提供一个链接到<代码>简单的反转< /代码>吗?我不知道有这样一个国际奥委会集装箱。你是说

简单注入器
但是如果我用同一个接口注册第二个类,它会抛出一个错误。
它会抛出什么样的异常?这里真正问题的可能重复是:你期望什么样的行为?您希望注入一组
IEcContract
类型,还是只注入一个?在后一种情况下,请描述您希望在何种条件下注入哪种实现。请阅读Simple Injector抛出的异常消息。它通常指向文档来描述引发异常的原因以及应该如何修复它。