使用Ninject to Property将依赖注入Global.asax

时间:2016-07-26 20:27:32

标签: c# asp.net ninject ninject.web

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

的Global.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 ...
    }
}

我已经尝试使用属性注入,因为Global类不可能使用构造函数注入。 DI正在其他地方工作,而不是在我的Global.asax 中,我需要在启动时注册一些东西。

我找到了一些相关问题的答案,例如:How do you resolve a Ninject dependency in the global file in ASP.NET?,但不幸的是,这对我来说并不适用。

我使用以下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" />

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

有关详细信息,请参阅此处https://github.com/ninject/ninject.extensions.logging/issues/14