ASP.NET网站中使用Ninject 3进行依赖注入

AFD*_*AFD 5 asp.net dependency-injection ninject

我尝试了如何在asp.net Web窗体上实现Ninject或DI中找到的以下解决方案(杰森的回答)

  1. 创建一个新的ASP.NET WebForms项目
  2. 使用NuGet添加Ninject.Web库(这也将删除Ninject.Web.Common和Ninject库)
  3. 在App_Start/NinjectWebCommon.cs/RegisterServices方法中注册自定义绑定
  4. 在页面上使用属性注入

在ASP.NET Web应用程序中运行良好.

问题是我想在ASP.NET 网站中使用Ninject for DI ,而不是Web应用程序.

我在NinjectWebCommon/RegisterServices中注册了自定义绑定:

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<ITestRepository>().To<TestRepository>();
}
Run Code Online (Sandbox Code Playgroud)

在网页中我注入它:

public partial class _Default : System.Web.UI.Page
{
    [Inject]
    public ITestRepository _repository { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        System.Diagnostics.Trace.WriteLine(_repository.ExecuteOperation());
    }
}
Run Code Online (Sandbox Code Playgroud)

它始终抛出一个空引用异常,并且永远不会到达NinjectWebCommon.cs中的断点 - 与Web应用程序不同.

还有什么办法让Ninject 3在网站上运行?

Eri*_*sch 10

我给你的第一个建议是......

不要使用ASP.NET网站.忘了他们存在.不惜一切代价避免它们.他们是过去几天的不合时宜的回归,由于遗留的原因,这些日子仍然存在.

我的第二条建议是......

如果您坚持继续使用网站项目,请大量投资于头痛药,因为您需要它.

我的第三条建议是......

见第一建议.

我的第四条建议是......

如果你完全无法控制它是否是一个网站项目,那么就放弃使用Ninject或任何其他DI容器的想法.网站项目继承自Web应用程序站点的不同基类集.你不会以同样的方式工作,你可能会花太多时间试图使它适合.

编辑:

基本上,代码模型在Web站点和Web应用程序之间的工作方式非常不同.您只需要看一下网站应用程序在Web应用程序应用程序中没有名称空间这一事实.这应该告诉你这些有多么不同.

我不完全确定激活过程在两者中都是一样的.

但是,说了这么多.你的代码有一个明显的问题.您的页面派生自System.Web.UI.Page而不是Ninject.Web.PageBase