【问题标题】:Ninject 2, logging, and WebFormsNinject 2、日志记录和 WebForms
【发布时间】:2010-02-27 01:27:35
【问题描述】:

正式发布的 Ninject 2 不再包含对用于 WebForms、MasterPages 等的 IoC 的 WebForms 特定功能的引用。它现在被分离为插件/扩展;在这种情况下是http://github.com/idavis/ninject.web 扩展。然而,我的问题是对 log4net(或 NLog)有依赖性,我找不到任何关于如何配置它以与我当前的 log4net 配置集成或完全删除它的文档(即将日志记录设置为 null 所以我不'不可能有两个 log4net 配置运行)。

http://markmail.org/message/7iv7nltanz6ve4ga#query:Error%20activating%20ILoggerFactory%20ninject.web+page:1+mid:6o4q6ee2js2k4gfp+state:results 引用了其他有同样问题的人,但同样,没有关于如何处理它的真正文档。我已经查看了所有这些的源代码,并且肯定遗漏了一些明显的东西。

谁能指出我处理这个问题的最佳方法的正确方向,这样我仍然可以轻松地将 Ninject 与 WebForms 集成,但没有运行无关的日志服务?或者不用担心 Global.asax 上的以下内容:

    protected override IKernel CreateKernel()
    {
        IKernel kernel =
        new StandardKernel(new SomeMyModule(), new Log4netModule());
        return kernel;
    }

我目前正在通过

在 global.asax 中启动我的 log4net 配置
 private readonly static ILog Log = LogManager.GetLogger(typeof(Global));:

【问题讨论】:

  • 看起来 ninject 需要 NullLogger?您是否尝试过添加任何日志记录模块?
  • 只是一个小点,你提到'kickstarting' log4net - 你知道那行只是说“给我一个”而不是“我们将在这里使用日志记录” (你很可能 - 只是想确定一下)stackoverflow.com/questions/1261158/log4net-initialisation
  • Mauricio - 是的,导致“未指定 ILogger”异常。这是有道理的,因为 Ninject 没有 NullLogger。鲁本 - 是的,我知道。 log4net 要求 LogManager.GetLogger a) 在与 log4net 配置所在的相同程序集中调用(这排除了我的错误模块所属的另一个程序集)和 b) 尽快。以这种方式在我做的地方调用它可以满足两者。
  • Mauricio - 更正:事实证明不添加任何日志记录模块是正确的配置,但我之前在这方面的尝试必须与我现有的 log4net 配置尚未初始化(导致没有 ILogger配置的异常)。哎呀。

标签: log4net ninject


【解决方案1】:

虽然 Ninject.Web 具有 ILogger 属性,但它不会记录任何内容。

如果您想完全禁用 Ninject.Extensions.Logging,请创建并绑定 ILoggerFactory 的实现,该实现从所有方法返回 null。

或者,如果您想使用 log4net 启用它,请从 ninject.org 获取 Ninject.Extensions.Logging 并从您的项目中引用 Ninject.Extensions.Logging.Log4net。它会被 Ninject 2.0 自动加载。

如果您是从源代码构建 Ninject.Web,您可以通过以下方式删除日志记录扩展:

  • 删除对该程序集的引用
  • 从拥有它的 5 个类中删除 ILogger 成员

【讨论】:

  • “它将由 Ninject 2.0 自动加载”是魔术词,因为它使用了我已经存在的 log4net 配置。
猜你喜欢
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 2011-06-17
  • 2011-01-28
  • 2012-12-16
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多