【发布时间】:2017-10-19 00:51:23
【问题描述】:
我目前正在使用一个使用 Ninject、Log4Net 和 Nancy 的应用程序。
我遇到的问题是确定将 Web.config 提供的 Log4Net 配置持久保存到所有注入的 ILogger 实例的最佳方法。
一些上下文:
在这个应用程序中,我们构造了一个单一的ninject StandardKernel,它会自动加载Ninject.Extensions.Logging提供的Log4NetModule
我们的 Nancy Bootstrapper 类使用 this project 继承自 NinjectNancyBootstrapper
使用上述方法,我们能够成功解析以下属性:
/// <summary>
/// Injected Logger
/// </summary>
[Inject]
public ILogger Logger { get; set; }
这依赖于我们的 Web.config 中提供的 Log4Net 配置。
就在创建静态StandardKernel 之前,我们正在执行 XmlConfigurator:
log4net.Config.XmlConfigurator.Configure();
_kernel = new StandardKernel();
据我了解,在创建任何 ILogger 实例之前,该配置器应该只需要在应用程序中调用一次(诚然这可能是不正确的)。在启动我的应用程序时,注入的第一个 ILogger 实例具有我所期望的包含的附加程序。每个后续调用仍然成功地解决了依赖关系,但缺少第一个配置的附加程序。这里是否存在XmlConfigurator 仅适用于创建的第一个 ILogger 的预期行为?虽然这在为整个应用程序使用单个 ILogger 的情况下肯定会起作用,但我希望每种类型至少有一个。
我最初尝试解决此问题的一个尝试是将 XMLConfigurator 附加到 RequestStartup 方法中,但这会给我们的 API 调用增加相当多的开销(响应时间几乎加倍)。
也许我完全错误地处理了这个问题,但我想知道是否有人对此问题有建议和/或解决方案。
谢谢。
【问题讨论】:
标签: c# .net ninject log4net nancy