Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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# 如何将实现同一接口的两个常量注入到同一个构造函数中?_C#_Dependency Injection_Ninject - Fatal编程技术网

C# 如何将实现同一接口的两个常量注入到同一个构造函数中?

C# 如何将实现同一接口的两个常量注入到同一个构造函数中?,c#,dependency-injection,ninject,C#,Dependency Injection,Ninject,我做了研究,发现了类似的问题(比如 )还有,但到目前为止,我看到的一切要么基于目标类型,要么基于添加到目标类型的属性(我希望避免) 是否有一种方法可以根据需要注入的构造函数中的参数名绑定同一接口的不同实现/常量 例如,假设我有以下简单的类: 接口{/*此处的成员*/} 类DoSomething1:IDoSomething{/*此处实现*/} 类DoSomething2:IDoSomething{/*此处实现*/} 我想将这两种实现都注入到一个类中: 类目标 { 目标(idosomethingo

我做了研究,发现了类似的问题(比如 )还有,但到目前为止,我看到的一切要么基于目标类型,要么基于添加到目标类型的属性(我希望避免)

是否有一种方法可以根据需要注入的构造函数中的参数名绑定同一接口的不同实现/常量

例如,假设我有以下简单的类:

接口{/*此处的成员*/}
类DoSomething1:IDoSomething{/*此处实现*/}
类DoSomething2:IDoSomething{/*此处实现*/}
我想将这两种实现都注入到一个类中:

类目标
{
目标(idosomethingone,idosomethingtwo){/*此处实现*/}
//代码的其余部分
}
现在我知道我可以为参数使用属性:

类目标
{
目标([Named(“One”)]idosomeone[Named(“Two”)]idosometwo){/*此处实现*/}
//代码的其余部分
}
//然后像这样把它们绑起来:
绑定()到()命名的(“一”);
Bind().To().Named(“两个”);

但是有没有一种方法可以避免拥有这些属性,并且仍然将两个实现都注入到同一个构造函数中的正确参数中呢?

我总是好奇这样的设计是如何产生的。是的,我理解这只是一个例子,但在实际世界中,什么样的场景会导致这样的设计被构建?@Nkosi目标是一个专门用于侦听消息队列的类。现在我还需要监听另一个代理上的另一个队列-因此我需要两个不同的代理,或者添加另一个专用于另一个代理的侦听器类,该类基本上重复与该类相同的代码。我通过引入另一个类暂时解决了这个问题,该类将两个代理都作为属性,并将其注入,而不是注入两个不同的代理,但我不太喜欢这个解决方案。我希望Ninject有更好的方法来做到这一点。使用
idosome[]multi
代替
idosomeone,idosometwo
@ZoharPeled我认为这是一个设计问题。最后一条评论中的描述似乎比原始问题中提供的简化示例更有趣。如果目标类对这两个依赖项都执行相同的操作,则这可能是一个@ZoharPeled,然后按照前面的注释中的建议将它们作为集合注入。我总是好奇这样的设计是如何产生的。是的,我理解这只是一个例子,但在实际世界中,什么样的场景会导致这样的设计被构建?@Nkosi目标是一个专门用于侦听消息队列的类。现在我还需要监听另一个代理上的另一个队列-因此我需要两个不同的代理,或者添加另一个专用于另一个代理的侦听器类,该类基本上重复与该类相同的代码。我通过引入另一个类暂时解决了这个问题,该类将两个代理都作为属性,并将其注入,而不是注入两个不同的代理,但我不太喜欢这个解决方案。我希望Ninject有更好的方法来做到这一点。使用
idosome[]multi
代替
idosomeone,idosometwo
@ZoharPeled我认为这是一个设计问题。最后一条评论中的描述似乎比原始问题中提供的简化示例更有趣。如果目标类对这两个依赖项都执行相同的操作,则这可能是一个@ZoharPeled,然后按照前面的注释中的建议将它们作为集合注入。