具有.net核心的NLog注入服务的自定义目标

时间:2016-11-02 10:11:36

标签: asp.net-core nlog

我正在使用带有NLog.Extensions.Logging的NLog来支持aps.net核心。我需要创建一个自定义目标并将服务注入到目标的构造函数中 以下代码永远不会执行:

public MyTarget(IService service) {....}

一旦删除IService param,一切正常。

如何将我的服务注入自定义目标?

1 个答案:

答案 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。