gpt4 book ai didi

asp.net - 在 ASP.NET 网站中使用 Ninject 3 进行依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-04 17:11:36 24 4
gpt4 key购买 nike

我尝试了 How can I implement Ninject or DI on asp.net Web Forms? 中的以下解决方案(杰森的回答)

  • 创建一个新的 ASP.NET WebForms 项目
  • 使用 NuGet 添加 Ninject.Web 库(这也会关闭 Ninject.Web.Common 和 Ninject 库)
  • 在 App_Start/NinjectWebCommon.cs/RegisterServices 方法中注册您的自定义绑定(bind)
  • 在您的页面上使用属性注入(inject)

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

    问题是我想在 ASP.NET 中使用 Ninject 进行 DI网站 ,而不是网络应用程序。

    我在 NinjectWebCommon/RegisterServices 中注册了自定义绑定(bind):
    private static void RegisterServices(IKernel kernel)
    {
    kernel.Bind<ITestRepository>().To<TestRepository>();
    }

    在网页中我注入(inject)它:
    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());
    }
    }

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

    为了让 Ninject 3 在网站上运行,还应该做些什么?

    最佳答案

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

    不要使用 ASP.NET 网站。忘记他们的存在。不惜一切代价避免它们。它们是对过去时代的不合时宜的回归,只是由于遗留原因而仍然存在。

    我的第二条建议是……

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

    我的第三条建议是……

    请参阅第一个建议。

    我的第四条建议是……

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

    编辑:

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

    我不完全确定激活过程在两者中是否相同。

    然而,说了这么多。您的代码存在明显问题。您的页面派生自 System.Web.UI.Page 而不是 Ninject.Web.PageBase

    关于asp.net - 在 ASP.NET 网站中使用 Ninject 3 进行依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10272698/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com