我目前正在尝试使用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" />
有什么想法吗?
答案 0 :(得分:1)
我相信在注入属性之前会调用Application_Start方法。
有关详细信息,请参阅此处https://github.com/ninject/ninject.extensions.logging/issues/14