使用 Ninject、Log4Net 和 Nancy 注入 ILogger
Injecting ILogger using Ninject, Log4Net, and Nancy
我目前正在使用一个使用 Ninject、Log4Net 和 Nancy 的应用程序。
我遇到的问题是确定将 Web.config 提供的 Log4Net 配置持久保存到 ILogger 的所有注入实例的最佳方法。
一些上下文:
在此应用程序中,我们构建了一个 ninject StandardKernel
,它会自动加载 Ninject.Extensions.Logging
提供的 Log4NetModule
我们的 Nancy Bootstrapper class 使用 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 调用增加了相当多的开销(响应时间几乎加倍)。
也许我完全错误地解决了这个问题,但我想知道是否有人有建议and/or解决这个问题的方法。
谢谢。
您只需要在 Ninject
中将 ILogger
注册为单例服务
像这样:
kernel.Bind<ILogger>.To<LoggerConstructor>().InSingletonScope();
我目前正在使用一个使用 Ninject、Log4Net 和 Nancy 的应用程序。
我遇到的问题是确定将 Web.config 提供的 Log4Net 配置持久保存到 ILogger 的所有注入实例的最佳方法。
一些上下文:
在此应用程序中,我们构建了一个 ninject StandardKernel
,它会自动加载 Ninject.Extensions.Logging
Log4NetModule
我们的 Nancy Bootstrapper class 使用 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 调用增加了相当多的开销(响应时间几乎加倍)。
也许我完全错误地解决了这个问题,但我想知道是否有人有建议and/or解决这个问题的方法。
谢谢。
您只需要在 Ninject
中将 ILogger
注册为单例服务
像这样:
kernel.Bind<ILogger>.To<LoggerConstructor>().InSingletonScope();