0

我在我的 asp.net 应用程序中将 Ninject 用于 DI,因此我的 Global 类继承自 NinjectHttpApplication。

在我的 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;
}

但是在下面的方法中,Logger 始终为空。

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 吗?

4

2 回答 2

1

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

于 2010-05-12T14:24:43.233 回答
0

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

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

于 2009-10-07T16:07:26.377 回答