2009-10-07 31 views
0

我在我的asp.net应用程序中使用Ninject for DI,所以我的Global类继承自NinjectHttpApplication。在global.asax中使用Ninject NLogModule记录器

在我的CreateKernel()中,我创建了自定义模块,DI对我来说工作正常。

但是,我注意到NinjectHttpApplication类中有一个Logger属性,所以我试图在Application_Error中每当发现异常时都使用它。

我想我正在为Ninject创建nlog模块,但我的记录器始终为空。这是我的CreateKernel:

protected override Ninject.Core.IKernel CreateKernel() 
{ 
    IKernel kernel = new StandardKernel(new NLogModule(), new NinjectRepositoryModule()); 
    return kernel; 
} 

但是在下面的方法中,记录器总是空的。

protected void Application_Error(object sender, EventArgs e) 
{ 
    Exception lastException = Server.GetLastError().GetBaseException(); 
    Logger.Error(lastException, "An exception was caught in Global.asax"); 
} 

为了澄清,记录器是在类型ILogger的NinjectHttpApplication一个属性,并已在[进样]属性

不知道如何正确地喷射到记录器?

+0

不应该重写Load()而不是CreateKernel()? – 2010-10-14 22:37:07

回答

0

你实际上在你的NLogModule中配置了一个ILogger吗?如果不是,那么Ninject可能不会知道在使用实现的NinjectHttpApplication类的Logger时要使用什么。

我会检查你的NLogModule是什么,我也建议把它放在你的问题中。我认为这可能有助于我们解决您的问题。

+0

NLogModule不是我的课程,它是我与Ninject一起下载的一个,它的类型为Ninject.Integration.NLog.Infrastructure.NLogModule 当我使用Reflector反汇编它时,它看起来像是在使用LogManager.GetLogger – 2009-10-07 16:35:56

+0

@ Ciaran这很有趣。我准备好了一个地方,你必须指定你想使用哪个ILogger,因为它可以是许多不同的日志(NLog,Log4net仅仅是一对夫妇)。我不确定是否有默认设置,但是您回复空白似乎表明没有默认设置。我会玩弄明确注册某种类型的ILogger,看看是否有帮助。 – Joseph 2009-10-07 17:01:00

+0

在我自己的模块中,我尝试使用以下方法绑定ILogger: Bind ()。到()。使用(); 但仍然无法正常工作。现在就用通常的方式创建NLog日志记录器 - 这应该不是那么困难! – 2009-10-09 11:10:07

1

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