winforms 如何在Windows客户端(net6.0-windows)应用程序中使用Serilog

uajslkp6  于 2022-11-16  发布在  Windows
关注(0)|答案(1)|浏览(225)

我尝试在使用.Net 6.0的C# Windows客户端(窗体)应用程序上使用Serilog和Ninjet
谁能告诉我如何配置Ninject,以便在此处注入ILogger:

public partial class TestingForm : Form
{

private readonly ILogger<TestingForm> _logger;

TestingForm(ILogger<TestingForm> logger)
{ 
 _logger = logger;
}
//etc.

}

我更希望使用类似于此处使用的.UseSeriLog()的函数:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .UseSerilog()
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

但我就是不知道如何用Ninject来实现

mspsb9vt

mspsb9vt1#

我创建了一个面向.NET 6的Windows窗体应用程序。我通过Nuget安装了Serilog和Ninject。
MyModule.cs:

using Ninject.Modules;
using Serilog;

namespace WinFormsApp1;

public class MyModule : NinjectModule
{
    public override void Load()
    {
        Bind<ILogger>().To<SeriLogging>();
    }
}

Programs.cs:

internal static class Program
{
    [STAThread]
    static void Main()
    {
        ApplicationConfiguration.Initialize();
        var kernel = new StandardKernel(new MyModule());
        var form = kernel.Get<Form1>();
        Application.Run(form);
    }
}

Serilog.cs

public class SeriLogging : ILogger
{
    public void Write(LogEvent logEvent)
    {
        //Implement Serilog here
    }
}

Serilog的ILogger是非泛型的,所以只使用ILogger。如果你想要TestingForm类型的ILogger,那么你可能需要安装Microsoft.Extensions.Logging。

using Serilog;

namespace WinFormsApp1;

public partial class Form1 : Form
{
    private readonly ILogger _logger;

    public Form1(ILogger logger)
    {
        InitializeComponent();
        _logger = logger;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        _logger.Error("aaaah");
    }
}

相关问题