1

我目前正在尝试使用 Ninject 和 Ninject.Web 将依赖项注入到 ASP.NET WebForms 应用程序中的全局类 (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();
}

作业调度器

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

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

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

我正在使用以下 Ninject NuGet 包:

<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" />

有任何想法吗?

4

1 回答 1

1

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

有关更多信息,请参见此处https://github.com/ninject/ninject.extensions.logging/issues/14

于 2017-02-09T13:37:57.753 回答