Ninject 未将服务注入 Web 窗体页面

Ninject not injecting service into Web Forms page

我试图在组合的 ASP.NET Web 窗体和 MVC 项目中将 Ninject 用于 DI。我通过 NuGet 安装了以下包(及其依赖项):

Ninject.MVC5 3.2.1.0

Ninject.Web 3.2.1.0

~/App_Start/NinjectWebCommon.cs我注册服务:

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<ITermusRepository>().To<TermusOracleRepository>();
}

在 MVC 控制器中,我使用构造函数注入来检索我的 ITermusRepository 实现:

public class Appraisal2013_2014FullController : Controller
{
    ITermusRepository repo { get; set; }

    public Appraisal2013_2014FullController(ITermusRepository Repo)
    {
        repo = Repo;
    }
}

MVC 工作得很好,我稍后在我的操作方法中使用 repo 来成功检索数据。一切都很好。

在 Web 窗体中,我使用属性注入。

public partial class _2013_2014_TERMUS_PaperTermus : BasePage
{
    [Inject]
    ITermusRepository repo { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {               
            var appraisal = repo.LoadByTermusId<Termus2013_2014EndYear>(Request.QueryString["TERMUSID"]);
        }

}

但是,repo.LoadByTermusId() 调用失败并显示 NullReferenceException,因为 repo 为空。

System.NullReferenceException: Object reference not set to an instance of an object.

显然 Ninject 至少对于 MVC 设置正确。我不明白为什么我的 ITermusRepository 实现没有被注入到我后面的 Web 窗体代码中。我该怎么做才能正确注入它?

我使用 Jason 在 How can I implement Ninject or DI on asp.net Web Forms? 中的回答作为我的工作模式。我不想使用 Joe 的回答,因为它需要修改全局应用程序 class 的基础 class、页面、母版页、ASMX 服务、通用处理程序等。这在当前看来是不必要的Ninject.

版本
[Inject]
ITermusRepository repo { get; set; }

需要

[Inject]
public ITermusRepository repo { get; set; }

这解决了我的 .aspx Web 表单页面的问题。但它并没有将它们注入我的 .ashx 通用处理程序。因为我没有很多,所以我在我的处理程序中创建了一个构造函数 class 并从内核中检索服务。

ITermusRepository repo { get; set;}

public GetPDF()
{
    var kernel = TERMUS.App_Start.NinjectWebCommon.CreateKernel();
    repo = kernel.Get<ITermusRepository>();
}