c# - Ninject - (usercontrol) 不包含采用 0 个参数的构造函数

标签 c# asp.net

您好:我已经成功地将 Ninject 与 MVC 3/4 和 WCF 扩展一起使用。我现在正在尝试使用 WebForms 进行简单的实现,但遇到了挑战。步骤:

  1. 我从 NuGet 下载了 Ninject.Web 并安装到我的 WebForms 项目中
  2. 我编辑了 NinjectWebCommon.cs -> CreateKernel 方法:

            kernel.Bind<ICasePresenter>().To<Presenter.CasePresenter>();
    
  3. 我编辑了我的用户控件:

    [Inject]
    private ICasePresenter presenter;
    
    public CaseSummaryControl(ICasePresenter presenter)
    {
        this.presenter = presenter;
    }
    

我可以看到断点击中了我的绑定(bind),但随后我得到了用户控件不包含采用 0 个参数的构造函数的错误。它没有注入(inject)我的实例(即使我添加了一个没有参数的构造函数,私有(private) var 最终还是 null。

提前致谢!

最佳答案

您正在使用字段注入(inject) 而不是构造函数注入(inject)。只需将 Inject 属性移动到您的构造函数:

private ICasePresenter presenter;

[Inject]
public CaseSummaryControl(ICasePresenter presenter)
{
    this.presenter = presenter;
}

或者添加一个不带参数的构造函数:

[Inject]
private ICasePresenter presenter;

public CaseSummaryControl(ICasePresenter presenter)
{
    this.presenter = presenter;
}

public CaseSummaryControl()
{

}

这样你就可以让构造函数保持单元测试的参数。

缺点是您可能在使用this.presenter 时需要添加空值检查,因为您现在可以创建CaseSummaryControl 没有指定ICasePresenter

阅读Ninject documenation关于各种注入(inject)模式。

关于c# - Ninject - (usercontrol) 不包含采用 0 个参数的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19719947/

相关文章:

c# - ASP 应用程序导致错误 500 并导致服务器频繁停止

c# - Parallel.For 中的变量

javascript - 为什么 Google Chart API 只显示饼图的图例?

c# - 如何在 asp.net 中给出表格的 cellpadding、cellspacing

c# - FormMethod.Post 在 MVC4 中返回查询字符串

c# - Excel 访问导入错误

C# ASP.NET 文本框双重 HTMLEncode 和防止 XSS

c# - WPF:如何为内容更改创建路由事件?

c# - NMock - 如何使具有相同参数类型的方法返回不同的值?

c# - 在 C# 中没有类型有什么新东西?