【发布时间】:2016-11-03 06:57:15
【问题描述】:
我将 NLog 与 NLog.Extensions.Logging 一起用于 aps.net 核心支持。我需要创建一个自定义目标并将服务注入目标的构造函数。
以下代码永远不会被执行:
public MyTarget(IService service) {....}
我删除 IService 参数后,一切正常。
如何将我的服务注入自定义目标?
【问题讨论】:
标签: asp.net-core nlog
我将 NLog 与 NLog.Extensions.Logging 一起用于 aps.net 核心支持。我需要创建一个自定义目标并将服务注入目标的构造函数。
以下代码永远不会被执行:
public MyTarget(IService service) {....}
我删除 IService 参数后,一切正常。
如何将我的服务注入自定义目标?
【问题讨论】:
标签: asp.net-core nlog
仍然不确定如何做到这一点的正确方法是什么。现在以以下方式实现(不是一个好的解决方案,但至少它有效):
public void ConfigureServices(IServiceCollection services)
{
......
services.AddScoped<MyCustomNlogTarget>();
}
public void Configure(IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory,
IServiceProvider provider)
{
var nlogProvider = ConfigurationItemFactory.Default.CreateInstance;
ConfigurationItemFactory.Default.CreateInstance = type =>
{
try
{
return nlogProvider(type);
}
catch (Exception)
{
}
return provider.GetService(type);
};
loggerFactory.AddNLog();
env.ConfigureNLog("NLog.config");
.......
}
它尝试使用开箱即用的 NLog 提供程序(用于默认目标和布局渲染)解析对象,如果失败(尝试使用 IService 解析我的目标时),它会使用 asp.net 核心 DI 解析。
【讨论】: