【问题标题】:Inject ILogger<T> into constructor that only expects ILogger将 ILogger<T> 注入到只需要 ILogger 的构造函数中
【发布时间】:2022-08-22 05:56:58
【问题描述】:

这类似于How to inject named logger generic ILogger<T> as ILogger into constructor using IServiceCollection and NLog

但是我正在寻找使用 Serilog + Autofac 的解决方案。

希望有一个适用于 ASP.net Core 6 和控制台 .NET 6 的解决方案

通常,MEL ILogger 的使用方式如下:


public class MyClass
{
  private readonly ILogger _logger;

  public MyClass(ILogger<MyClass> logger) 
  {
    _logger = logger;
    _logger.LogInformation(\"Constructor\");
  }
}

手动输入很繁琐 ILogger&lt;MyClass&gt; 到处都是 ILogger&lt;MyOtherClass&gt;, ILogger&lt;YetAnotherClass&gt;

有没有办法省略 &lt;MyClass&gt; 部分,但实际上收到 ILogger&lt;MyClass&gt; 如下所示? (显然在How to inject named logger generic ILogger<T> as ILogger into constructor using IServiceCollection and NLog 发问者声称有一个使用 Autofac 的解决方案,但我没有足够的声誉在评论中问他)

public class MyClass
{
  private readonly ILogger _logger;

//public MyClass(ILogger<MyClass> logger)
  public MyClass(ILogger logger) // <<<<< notice that ILogger is used, instead of ILogger<T>
  {
    _logger = logger;
    _logger.LogInformation(\"Constructor\");
  }
}

先感谢您。

  • \"有没有办法省略 <MyClass> 部分,但实际上接收 ILogger<MyClass> 如下所示?\"- 不在 .NET 中使用股票 Microsoft.Extensions.DependencyInjection,不。
  • @Dai 如果我们不使用股票 Microsoft.Extensions.DependencyInjection 怎么样?
  • 看起来这里给出了几个提议的 AutoFac / NLog 解决方案:stackoverflow.com/questions/20847068/… 也许您可以将它们调整为 Serilog

标签: c# .net-core dependency-injection autofac serilog


【解决方案1】:

我认为我的 nuget 包正是您正在寻找的:

在这里您可以阅读有关如何使用它的信息:
https://github.com/gcsizmadia/EgonsoftHU.Extensions.Logging.Serilog.Autofac

你可以在这里下载:
https://www.nuget.org/packages/EgonsoftHU.Extensions.Logging.Serilog.Autofac

【讨论】:

    猜你喜欢
    • 2021-04-19
    • 2020-07-28
    • 2022-01-18
    • 2017-05-05
    • 2020-05-18
    • 2018-02-11
    • 1970-01-01
    • 2020-07-16
    相关资源
    最近更新 更多