注入具有多个构造函数的类

时间:2010-03-26 09:42:34

标签: ninject

使用NInject解析具有多个构造函数的类似乎不起作用。

public class Class1 : IClass
{
public Class1(int param) {...}
public Class1(int param2, string param3) { .. }
}

以下似乎不起作用:

IClass1 instance =
    IocContainer.Get<IClass>(With.Parameters.ConstructorArgument(“param”, 1));

模块中的钩子很简单,在添加额外的构造函数之前工作: 绑定()为了();

2 个答案:

答案 0 :(得分:5)

它不起作用的原因是.ctor选择过程中不考虑手动提供的.ctor参数。 .ctors根据参数类型绑定的参数数量进行评分。在激活期间,将应用手动提供的.ctor参数。由于您没有对int或string进行绑定,因此不会对它们进行评分。您可以通过将[Inject]属性添加到您想要使用的.ctor来强制评分。

答案 1 :(得分:4)

您遇到的问题是Ninject根据可用的绑定参数数量选择.ctors。这意味着Ninject从根本上不了解超载。

您可以通过在绑定中使用.ToConstructor()函数并将其与.Named()函数组合来解决此问题。这允许您为同一个类创建多个绑定到具有不同名称的不同构造函数。它有点笨拙,但它确实有效。

我维护自己的软件开发博客,所以这最终成为了一个帖子。如果你想要一些示例代码和更多解释,你应该检查一下。

http://www.nephandus.com/2013/05/10/overloading-ninject/