You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

手动实例化类时如何搭配类型化ILogger使用微软日志扩展?

解决方案

方案1:遵循DI规范,避免手动实例化(推荐)

这是最符合ASP.NET Core DI设计原则的做法,不需要手动传递任何日志参数:

  • 第一步:在Program.cs(或Startup.cs)里把MyWorker注册到DI容器:
// .NET 6+ 顶层语句写法
builder.Services.AddTransient<MyWorker>();
  • 第二步:直接在控制器构造函数注入MyWorker,容器会自动为MyWorker注入匹配的ILogger<MyWorker>实例:
public class MyController: ControllerBase
{
     private readonly ILogger<MyController> _logger;
     private readonly MyWorker _worker;
     public MyController(ILogger<MyController> logger, MyWorker worker) 
     { 
         _logger = logger; 
         _worker = worker;
     }

     public bool DoWork() 
    {
         _worker.DoSomething(); // 直接用注入好的实例即可
    }
}

备注:除非有不可替代的动态实例化需求,否则优先选择该方案,DI容器会自动处理所有依赖链的注入逻辑,后续MyWorker新增依赖时不需要修改调用侧代码

方案2:确实需要手动new的场景

如果你有特殊逻辑必须在方法内动态创建MyWorker实例,有两种可选传参方式:

方式A:直接注入ILogger<MyWorker>到控制器

在控制器构造函数加对应类型的Logger参数,new的时候直接传即可:

public class MyController: ControllerBase
{
     private readonly ILogger<MyController> _logger;
     private readonly ILogger<MyWorker> _workerLogger;
     public MyController(ILogger<MyController> logger, ILogger<MyWorker> workerLogger) 
     { 
         _logger = logger; 
         _workerLogger = workerLogger;
     }

     public bool DoWork() 
    {
         MyWorker w = new MyWorker(_workerLogger); 
         w.DoSomething();
    }
}

方式B:注入ILoggerFactory动态创建Logger

如果你的MyWorker是动态生成类型、或者需要批量创建多个不同类的Logger,可以用工厂生成:

public class MyController: ControllerBase
{
     private readonly ILogger<MyController> _logger;
     private readonly ILoggerFactory _loggerFactory;
     public MyController(ILogger<MyController> logger, ILoggerFactory loggerFactory) 
     { 
         _logger = logger; 
         _loggerFactory = loggerFactory;
     }

     public bool DoWork() 
    {
         var workerLogger = _loggerFactory.CreateLogger<MyWorker>();
         MyWorker w = new MyWorker(workerLogger); 
         w.DoSomething();
    }
}

内容的提问来源于stack exchange,提问作者bpeikes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:24:04