【问题标题】:Injection of class with multiple constructors注入具有多个构造函数的类
【发布时间】:2011-02-01 02:35:50
【问题描述】:

使用 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));

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

【问题讨论】:

标签: ninject


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    我维护自己的软件开发博客,因此最终将其发布在上面。如果您想要一些示例代码和更多解释,您应该查看它。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      相关资源
      最近更新 更多