目前,我正在尝试使用Ninject和Ninject.Web将依赖项注入到ASP.NET WebForms应用程序中的全局类(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 ...
}
}我已经尝试使用属性注入,因为对于全局类来说,构造器注入是不可能的。DI在其他地方都能工作,只是在我的Global.asax中,我需要在启动时注册一些东西。
我找到了一些相关问题的答案,比如:How do you resolve a Ninject dependency in the global file in ASP.NET?,但不幸的是,这并不适用于我。
我使用的是以下Ninject包:
<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" />有什么想法吗?
发布于 2017-02-09 13:37:57
我相信Application_Start方法是在注入属性之前调用的。
有关更多信息,请参见这里https://github.com/ninject/ninject.extensions.logging/issues/14
https://stackoverflow.com/questions/38599285
复制相似问题