【问题标题】:Custom target with injected services for NLog with .net core带有 .net 核心的 NLog 注入服务的自定义目标
【发布时间】:2016-11-03 06:57:15
【问题描述】:

我将 NLog 与 NLog.Extensions.Logging 一起用于 aps.net 核心支持。我需要创建一个自定义目标并将服务注入目标的构造函数。
以下代码永远不会被执行:

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

我删除 IService 参数后,一切正常。

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

【问题讨论】:

    标签: asp.net-core nlog


    【解决方案1】:

    仍然不确定如何做到这一点的正确方法是什么。现在以以下方式实现(不是一个好的解决方案,但至少它有效):

    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 解析。

    【讨论】:

      猜你喜欢
      • 2011-08-26
      • 2022-08-19
      • 2018-05-08
      • 1970-01-01
      • 2021-03-19
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多