[英]How to dependency inject Serilog into the rest of my classes in .NET Console App
[英].NET DependencyInjection and Serilog without using IHost (for console app)
当您查看 .NET 项目上的依赖注入和 Serilog 解决方案时,大多数文档和博客都参考 IHost model。 对于当前的 .NET 6 或其他版本的 .NET 内核,这无关紧要。 对于自 .NET Core 2.1 以来提供 REST API 的应用程序,这是我最喜欢的方式。
我首先定义了一个 BuildLogger() 方法来配置具有最低日志级别的 Serilog 并添加我需要的所有丰富器/接收器。
所以我的 Program.Main 方法曾经看起来像:
Log.Logger = LoggerBuilder.BuildLogger();
var builder = Host.CreateDefaultBuilder(args).UseSerilog(); // serilog injected in Host.
builder.ConfigureServices(services => services.AddMyServices());
using var source = new CancellationTokenSource();
await builder.Build().RunAsync(source.Token).ConfigureAwait(false);
一切都好。
问题是:如何在不使用来自 .NET 6 的 IHost model的情况下重用 DI 和 Serilog? 我今天的用户案例是一个控制台应用程序,它只运行一些测试然后关闭,并且仍然重用我为以前的应用程序编写的一些部分。
所以代替上面的,我定义了
Log.Logger = LoggerBuilder.BuildLogger();
await using var serviceProvider = new ServiceCollection()
.AddMyServices()
.AddLogging(logBuilder => logBuilder.AddSerilog()) // attach serilog.
.BuildServiceProvider()
RunTests(serviceProvider);
这似乎按预期工作。
使用 AddLogging/AddSerilog() 而不是 UseSerilog() 的技巧可能对其他人有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.