我正在使用带有NLog.Extensions.Logging
的NLog来支持aps.net核心。我需要创建一个自定义目标并将服务注入到目标的构造函数中
以下代码永远不会执行:
public MyTarget(IService service) {....}
一旦删除IService
param,一切正常。
如何将我的服务注入自定义目标?
答案 0 :(得分:4)
仍然不确定如何做到这一点的正确方法是什么。现在以下列方式实现(不是一个好的解决方案,但至少它可以工作):
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。