在global.asax中使用Ninject NLogModule Logger

时间:2009-10-07 15:35:14

标签: ninject global-asax nlog

我在我的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吗?

2 个答案:

答案 0 :(得分:1)

Download来自GitHub的最新版本。记录已删除。您没有看到注入记录器的原因是Ninject没有创建HttpApplication类,因此它不知道要注入它,您必须手动分配它。 Ninject只能初始化内核激活的组件。

答案 1 :(得分:0)

您是否真的在NLogModule中连接ILogger?如果没有,那么当您使用已实现的NinjectHttpApplication类的Logger时,Ninject可能不知道该使用什么。

我会检查你的NLogModule中的内容,我也建议把它放在你的问题中。我认为它可以帮助我们解决您的问题。