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

.NET 6 Windows客户端(WinForms)中Ninject注入Serilog ILogger配置

.NET 6 WinForms中结合Serilog与Ninject实现ILogger注入

步骤1:安装必要NuGet包

需要安装以下包:

  • Serilog
  • Serilog.Sinks.Console(可根据需求替换为Serilog.Sinks.File等其他输出目标)
  • Serilog.Extensions.Logging
  • Ninject

步骤2:初始化Serilog

在项目入口(如Program.cs)中先配置并启动Serilog:

using Serilog;

// 配置Serilog
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.Console()
    .CreateLogger();

步骤3:配置Ninject绑定

创建Ninject内核,配置泛型ILogger<T>的绑定逻辑,让Ninject能正确解析日志实例:

using Ninject;
using Microsoft.Extensions.Logging;
using Serilog.Extensions.Logging;

var kernel = new StandardKernel();

// 注册Serilog的LoggerFactory实例
var loggerFactory = new SerilogLoggerFactory(Log.Logger);
kernel.Bind<ILoggerFactory>().ToConstant(loggerFactory);

// 绑定泛型ILogger<T>,通过LoggerFactory创建对应类型的日志实例
kernel.Bind(typeof(ILogger<>)).ToMethod(context =>
{
    var factory = context.Kernel.Get<ILoggerFactory>();
    var targetType = context.GenericArguments[0];
    return factory.CreateLogger(targetType);
});

步骤4:修正TestingForm构造函数

确保构造函数为public,否则Ninject无法实例化该类:

public partial class TestingForm : Form
{
    private readonly ILogger<TestingForm> _logger;

    public TestingForm(ILogger<TestingForm> logger)
    {
        InitializeComponent();
        _logger = logger;
        // 测试日志输出
        _logger.LogInformation("TestingForm初始化完成");
    }
}

步骤5:从Ninject容器获取Form实例

在Program.cs中,不要直接new TestingForm(),而是通过Ninject内核获取实例以完成依赖注入:

Application.SetHighDpiMode(HighDpiMode.SystemAware);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

// 从容器获取TestingForm,自动注入ILogger实例
var form = kernel.Get<TestingForm>();
Application.Run(form);

补充说明

  • 若需要通过配置文件(如appsettings.json)管理Serilog规则,可安装Serilog.Settings.Configuration包扩展配置能力。
  • 应用退出时记得调用Log.CloseAndFlush()释放日志资源:
Application.ApplicationExit += (sender, e) => Log.CloseAndFlush();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:41:17