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

如何在控制台应用中通过依赖注入在自定义类中使用日志记录器

控制台应用中给自定义类注入日志记录器的实现方法

你完全可以用依赖注入(DI)的方式实现,和Azure Functions的思路一致,具体步骤如下:

1. 添加依赖注入包

首先需要安装Microsoft.Extensions.DependencyInjection NuGet包,这是.NET官方的DI容器实现。

2. 重构Program.cs,配置DI容器

把原来的日志工厂配置整合到DI容器中,同时注册你的自定义类:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

// 配置DI容器
var services = new ServiceCollection();

// 注册日志服务
services.AddLogging(builder =>
{
    builder
        .AddFilter("Microsoft", LogLevel.Warning)
        .AddFilter("System", LogLevel.Warning)
        .AddConsole();
});

// 注册自定义Test类(这里用瞬时生命周期,可根据需求调整)
services.AddTransient<Test>();

// 构建服务提供者
using var serviceProvider = services.BuildServiceProvider();

// 从容器中获取Test实例(此时日志已自动注入)
var test = serviceProvider.GetRequiredService<Test>();

3. 修改Test类,通过构造函数注入日志

把日志记录器通过构造函数注入,就像Azure Functions里的方式:

internal class Test
{
    private readonly ILogger<Test> _logger;

    // 构造函数注入ILogger<Test>
    public Test(ILogger<Test> logger)
    {
        _logger = logger;
        _logger.LogInformation("Calling Test");
    }
}

补充:不使用DI的简易方式

如果不想引入DI容器,也可以直接在创建Test实例时手动传入日志实例:

// 在Program.cs中
var logger = loggerFactory.CreateLogger<Test>();
var test = new Test(logger);

// 修改Test类构造函数
internal class Test
{
    private readonly ILogger<Test> _logger;

    public Test(ILogger<Test> logger)
    {
        _logger = logger;
        _logger.LogInformation("Calling Test");
    }
}

但推荐使用DI的方式,尤其是当项目中有多个类需要日志或其他服务时,DI能更好地解耦代码、管理实例生命周期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:15:18