我在我的asp.net应用程序中使用Ninject进行DI,因此我的Global类继承自NinjectHttpApplication。
在我的CreateKernel()中,我正在创建我的自定义模块,DI对我来说很好。
但是,我注意到NinjectHttpApplication类中有一个Logger属性,所以每当没有捕获到异常时,我都会尝试在Application_Error中使用它。
我认为我正在为Ninject正确创建nlog模块,但我的记录器始终为null。这是我的CreateKernel:
protected override Ninject.Core.IKernel CreateKernel()
{
IKernel kernel = new StandardKernel(new NLogModule(), new NinjectRepositoryModule());
return kernel;
}
但是在以下方法中,Logger始终为null。
protected void Application_Error(object sender, EventArgs e)
{
Exception lastException = Server.GetLastError().GetBaseException();
Logger.Error(lastException, "An exception was caught in Global.asax");
}
为了澄清,Logger是ILogger类型的NinjectHttpApplication上的一个属性,并具有[Inject]属性
知道如何正确注入Logger吗?
答案 0 :(得分:1)
Download来自GitHub的最新版本。记录已删除。您没有看到注入记录器的原因是Ninject没有创建HttpApplication类,因此它不知道要注入它,您必须手动分配它。 Ninject只能初始化内核激活的组件。
答案 1 :(得分:0)
您是否真的在NLogModule中连接ILogger?如果没有,那么当您使用已实现的NinjectHttpApplication类的Logger时,Ninject可能不知道该使用什么。
我会检查你的NLogModule中的内容,我也建议把它放在你的问题中。我认为它可以帮助我们解决您的问题。