您好:我已经成功地将 Ninject 与 MVC 3/4 和 WCF 扩展一起使用。我现在正在尝试使用 WebForms 进行简单的实现,但遇到了挑战。步骤:
- 我从 NuGet 下载了 Ninject.Web 并安装到我的 WebForms 项目中
我编辑了 NinjectWebCommon.cs -> CreateKernel 方法:
kernel.Bind<ICasePresenter>().To<Presenter.CasePresenter>();
我编辑了我的用户控件:
[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/