2

您好:我已经成功地将 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;
    }
    

我可以看到断点命中了我的绑定,但随后我收到错误消息,即用户控件不包含采用 0 个参数的构造函数。它没有注入我的实例(即使我添加了一个不带参数的构造函数,私有 var 最终也会为空。

提前致谢!

4

2 回答 2

1

您正在使用字段注入而不是构造函数注入。只需将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 文档。

于 2013-11-01T02:42:26.690 回答
0

ASP.NET Webforms 主要支持基于 PROPERTY 的注入。如果您使用构造函数来定义注入,那么它只会抛出错误。

以下是您可以按照今天的文档执行的步骤

  1. 通过键入Install-Package Ninject.Web使用包管理器控制台安装Ninject
  2. 现在应该安装 Ninject,您会在App_Start文件夹中看到一个名为NinjectWebCommon.cs的文件。只需将您的绑定放在那里,就像提问者已经写的那样。
  3. 与其创建构造函数,不如在调用类/方法中创建公共属性并在其上方使用[Inject]属性。

编译您的应用程序,现在应该会自动创建依赖项。

您可以在另一篇文章Using Ninject v3 in ASP.NET Web Forms中看到这些步骤的快照演示

于 2016-11-16T09:24:32.063 回答