使用Ninject to Property将依赖项注入Global.asax的Application_Start方法

本文关键字:asax Application 方法 Start Global 注入 to Ninject Property 依赖 使用 | 更新日期: 2023-09-27 17:58:59

我目前正在尝试使用Ninject和Ninject.Web将依赖项注入ASP.NET WebForms应用程序中的Global类(Global.asax)。一旦我试图从注入的类中调用任何函数(例如Application_Start中),我就会出现NullReferenceException。

全球.asax:

public class Global : System.Web.HttpApplication
{
    [Inject]
    public IJobScheduler JobScheduler { private get; set; }
    protected void Application_Start(object sender, EventArgs e)
    {
        JobScheduler.RegisterOnStartup();
    }
}

NinjectWebCommon.cs

public static class NinjectWebCommon 
{
    private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<IJobScheduler>().To<JobScheduler>();
    }        
}

IJobScheduler

public interface IJobScheduler
{
    void RegisterOnStartup();
}

JobScheduler

public class JobScheduler : IJobScheduler
{
    public void RegisterOnStartup()
    {
        //Stuff goes in here ...
    }
}

我已经在尝试使用属性注入,因为构造函数注入不可能用于全局类DI在其他任何地方都在工作,只是不在我的Global.asax中,我需要在启动期间注册一些东西。

我找到了一些相关问题的答案,比如:如何在ASP.NET中解决全局文件中的Ninject依赖项?但不幸的是,这对我不起作用。

我正在使用以下NinjectNuGet包:

<package id="Ninject" version="3.2.2.0" targetFramework="net40" />
<package id="Ninject.Web" version="3.2.1.0" targetFramework="net40" />
<package id="Ninject.Web.Common" version="3.2.0.0" targetFramework="net40" />
<package id="Ninject.Web.Common.WebHost" version="3.2.0.0" targetFramework="net40" />

有什么想法吗?

使用Ninject to Property将依赖项注入Global.asax的Application_Start方法

我相信Application_Start方法是在注入属性之前调用的。

查看此处了解更多信息https://github.com/ninject/ninject.extensions.logging/issues/14