Asp.net 如何将Ninject.Web.PageBase与另一个自定义.NET PageBase一起使用

Asp.net 如何将Ninject.Web.PageBase与另一个自定义.NET PageBase一起使用,asp.net,dependency-injection,ninject-2,Asp.net,Dependency Injection,Ninject 2,我正在尝试让Ninject使用已经有自定义PageBase对象的WebForms应用程序。但是,我不确定是否可以将Ninject的PageBase对象与另一个自定义PageBase对象一起使用。我已经搜索了一段时间,想看看我是否能找到这个问题的答案,或者学习如何解决这个问题,但我发现的是: 我已经用一个共享基类拼凑了一个替代方案 派生自第页。大致上是这样的 public abstract class PageBase : Page { public IKernel Kernel { get;

我正在尝试让Ninject使用已经有自定义PageBase对象的WebForms应用程序。但是,我不确定是否可以将Ninject的PageBase对象与另一个自定义PageBase对象一起使用。我已经搜索了一段时间,想看看我是否能找到这个问题的答案,或者学习如何解决这个问题,但我发现的是:

我已经用一个共享基类拼凑了一个替代方案 派生自第页。大致上是这样的

public abstract class PageBase : Page
{
  public IKernel Kernel { get; private set; }
  public PageBase() { Kernel = ...; }
  public void Page_Init() { Kernel.Inject(this); }
} 
这将允许您在任何 从PageBase继承。请注意,构造函数是不完整的-- 您必须以某种静态方式访问内核。你应该 能够以某种方式从HttpApplication读取它

(来源:,链接自):

这看起来可能对我有用,因为我似乎可以将此代码应用于现有的自定义PageBase。但是,我对作者所说的“构造器不完整——您必须以某种静态方式访问内核”的部分感到困惑


有人知道这句话的意思吗?有人知道如何以静态方式访问Ninject内核吗?

您不需要从Ninject页面库派生。您也可以使用NinjectHttpModule


您不需要从Ninject页面基派生。您也可以使用NinjectHttpModule


谢谢你,雷莫。这似乎对我有用。但是,我还有一个新手问题。我如何测试它以确保它正常工作?例如,我是否需要在代码隐藏中对现有的.aspx页面进行某种注入?我仍在试图了解WebForms和DI(或IoC)是如何协同工作的。该模块在页面初始化时注入每个页面及其所有控件。唯一不允许您访问构造函数中的依赖项。查看是否所有内容都正确注入的唯一方法是打开页面。如果出现问题,您将立即看到它,原因是NullReferenceExceptions。不幸的是,对于WebForms没有更好的方法。我唯一能建议的就是用MVC实现任何新页面,并可能将需要扩展到MVC的每个页面都移植到MVC。。。这很难。我刚刚意识到问题的根源是NinjectHttpModule。我还不知道为什么,但当我使用它时,我最终从一个自定义页面对象中得到错误,前面提到的自定义PageBase类就是从该对象派生的。通过坚持使用标准的System.Web.HttpApplication,并将IKernel CreateKernel作为非抽象方法调用,我能够避免出现此错误。但是,现在我恐怕我已经在我的应用程序中破坏了DI。。。嗯,DI还没有真正工作过,所以我想我不可能打破它……无论如何,非常感谢你迄今为止给出的建议。我非常感激。谢谢你,雷莫。这似乎对我有用。但是,我还有一个新手问题。我如何测试它以确保它正常工作?例如,我是否需要在代码隐藏中对现有的.aspx页面进行某种注入?我仍在试图了解WebForms和DI(或IoC)是如何协同工作的。该模块在页面初始化时注入每个页面及其所有控件。唯一不允许您访问构造函数中的依赖项。查看是否所有内容都正确注入的唯一方法是打开页面。如果出现问题,您将立即看到它,原因是NullReferenceExceptions。不幸的是,对于WebForms没有更好的方法。我唯一能建议的就是用MVC实现任何新页面,并可能将需要扩展到MVC的每个页面都移植到MVC。。。这很难。我刚刚意识到问题的根源是NinjectHttpModule。我还不知道为什么,但当我使用它时,我最终从一个自定义页面对象中得到错误,前面提到的自定义PageBase类就是从该对象派生的。通过坚持使用标准的System.Web.HttpApplication,并将IKernel CreateKernel作为非抽象方法调用,我能够避免出现此错误。但是,现在我恐怕我已经在我的应用程序中破坏了DI。。。嗯,DI还没有真正工作过,所以我想我不可能打破它……无论如何,非常感谢你迄今为止给出的建议。我非常感激。