【问题标题】:Using the Ninject NLogModule Logger in global.asax在 global.asax 中使用 Ninject NLogModule 记录器
【发布时间】:2009-10-07 15:35:13
【问题描述】:

我在我的 asp.net 应用程序中使用 Ninject for 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 吗?

【问题讨论】:

  • 你不应该重写 Load() 而不是 CreateKernel() 吗?

标签: ninject global-asax nlog


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    我会检查您的 NLogModule 中的内容,并建议将其放入您的问题中。我认为它可能会帮助我们解决您的问题。

    【讨论】:

    • NLogModule 不是我的课,它是我和 Ninject 一起下载的,它的类型是 Ninject.Integration.NLog.Infrastructure.NLogModule 当我用 Reflector 拆解它时,它看起来像是在使用LogManager.GetLogger
    • @Ciaran 这很有趣。我准备好在某个地方你必须指定要使用的 ILogger,因为它可以是许多不同的日志(NLog、Log4net 仅举几例)。我不确定是否有默认设置,但是您返回 null 似乎表明没有默认设置。我会尝试明确注册某种类型的 ILogger,看看是否有帮助。
    • 在我自己的模块中,我尝试使用以下方法绑定 ILogger: Bind().To().Using();但仍然无法正常工作。现在只需按照通常的方式创建 NLog 记录器 - 应该不会这么难!
    猜你喜欢
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 2015-02-11
    • 2011-01-28
    • 2011-06-24
    • 1970-01-01
    相关资源
    最近更新 更多