C# 如何在.NET控制台应用程序中将Serilog注入到我的其余类中

C# 如何在.NET控制台应用程序中将Serilog注入到我的其余类中,c#,.net,dependency-injection,serilog,.net-5,C#,.net,Dependency Injection,Serilog,.net 5,我刚开始学习,但我不知道如何将依赖注入ILogger到我的类中。如果我使用的是ASP.NET Core 5,这很容易,但我使用的是.NET Core控制台应用程序。我该怎么做呢 在使用log4net之前: 公共类测试策略 { 私有静态只读ILog_logger=LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.Name); ... } 我的日志记录器创建: var configuration=new Configu

我刚开始学习,但我不知道如何将依赖注入ILogger到我的类中。如果我使用的是ASP.NET Core 5,这很容易,但我使用的是.NET Core控制台应用程序。我该怎么做呢

在使用log4net之前:
公共类测试策略
{
私有静态只读ILog_logger=LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.Name);
...
}
我的日志记录器创建:
var configuration=new ConfigurationBuilder()
.AddJsonFile(“appsettings.json”)
.Build();
变量记录器=新记录器配置()
.ReadFrom.Configuration(配置)
.CreateLogger();

我是否必须将DI
记录器
划分到所有类中?

在.Net核心控制台应用程序中的内置DI机制可以使用 Microsoft.Extensons.DependecyInjection软件包 安装DI包后,可以通过实例化ServiceCollection实例来配置服务。 Serilog日志记录功能可以按如下方式添加

var serviceProvider = new ServiceCollection()
                      .AddSingleton<IFoo, Foo>()
                      .AddSingleton<IBar, Bar>()
                      .AddLogging(builder =>
                      {
                          var logger = new LoggerConfiguration()
                          .MinimumLevel.Debug()
                          .WriteTo.Console()
                          .CreateLogger();

                          builder.AddSerilog(logger);
                      })
                      .BuildServiceProvider();
var serviceProvider=new servicecolection()
.AddSingleton()
.AddSingleton()
.AddLogging(生成器=>
{
变量记录器=新记录器配置()
.MinimumLevel.Debug()
.WriteTo.Console()
.CreateLogger();
builder.AddSerilog(记录器);
})
.BuildServiceProvider();
要封装DI配置,可以在类中实现配置

public class Startup
        {
            private ServiceProvider _serviceProvider;
            public Startup()
            {
                ConfigureServices();
            }

            private void ConfigureServices()
            {
                _serviceProvider = new ServiceCollection()
                      .AddSingleton<IFoo, Foo>()
                      .AddSingleton<IBar, Bar>()
                      .AddLogging(builder =>
                      {
                          var logger = new LoggerConfiguration()
                          .MinimumLevel.Debug()
                          .WriteTo.Console()
                          .CreateLogger();

                          builder.AddSerilog(logger);
                      })
                      .BuildServiceProvider();
            }

            public ServiceProvider Provider { get { return _serviceProvider; } }
        }
公共类启动
{
私人服务提供商(U)服务提供商;;
公共启动()
{
配置服务();
}
私有void配置服务()
{
_serviceProvider=新的ServiceCollection()
.AddSingleton()
.AddSingleton()
.AddLogging(生成器=>
{
变量记录器=新记录器配置()
.MinimumLevel.Debug()
.WriteTo.Console()
.CreateLogger();
builder.AddSerilog(记录器);
})
.BuildServiceProvider();
}
公共服务提供者提供程序{get{return\u ServiceProvider;}}
}
然后在program main方法中,应该创建Startup类的新实例,并且可以使用Startup实例的provider属性调用起点实现

var startup = new Startup();
        startup.Provider.GetService<IFoo>().DoSomthing();
var startup=newstartup();
startup.Provider.GetService().DoSomthing();

在.Net核心控制台应用程序中的内置DI机制可以使用 Microsoft.Extensons.DependecyInjection软件包 安装DI包后,可以通过实例化ServiceCollection实例来配置服务。 Serilog日志记录功能可以按如下方式添加

var serviceProvider = new ServiceCollection()
                      .AddSingleton<IFoo, Foo>()
                      .AddSingleton<IBar, Bar>()
                      .AddLogging(builder =>
                      {
                          var logger = new LoggerConfiguration()
                          .MinimumLevel.Debug()
                          .WriteTo.Console()
                          .CreateLogger();

                          builder.AddSerilog(logger);
                      })
                      .BuildServiceProvider();
var serviceProvider=new servicecolection()
.AddSingleton()
.AddSingleton()
.AddLogging(生成器=>
{
变量记录器=新记录器配置()
.MinimumLevel.Debug()
.WriteTo.Console()
.CreateLogger();
builder.AddSerilog(记录器);
})
.BuildServiceProvider();
要封装DI配置,可以在类中实现配置

public class Startup
        {
            private ServiceProvider _serviceProvider;
            public Startup()
            {
                ConfigureServices();
            }

            private void ConfigureServices()
            {
                _serviceProvider = new ServiceCollection()
                      .AddSingleton<IFoo, Foo>()
                      .AddSingleton<IBar, Bar>()
                      .AddLogging(builder =>
                      {
                          var logger = new LoggerConfiguration()
                          .MinimumLevel.Debug()
                          .WriteTo.Console()
                          .CreateLogger();

                          builder.AddSerilog(logger);
                      })
                      .BuildServiceProvider();
            }

            public ServiceProvider Provider { get { return _serviceProvider; } }
        }
公共类启动
{
私人服务提供商(U)服务提供商;;
公共启动()
{
配置服务();
}
私有void配置服务()
{
_serviceProvider=新的ServiceCollection()
.AddSingleton()
.AddSingleton()
.AddLogging(生成器=>
{
变量记录器=新记录器配置()
.MinimumLevel.Debug()
.WriteTo.Console()
.CreateLogger();
builder.AddSerilog(记录器);
})
.BuildServiceProvider();
}
公共服务提供者提供程序{get{return\u ServiceProvider;}}
}
然后在program main方法中,应该创建Startup类的新实例,并且可以使用Startup实例的provider属性调用起点实现

var startup = new Startup();
        startup.Provider.GetService<IFoo>().DoSomthing();
var startup=newstartup();
startup.Provider.GetService().DoSomthing();

下面是一个使用.net 5的示例,使用
Microsoft.Extensions.DependencyInjection

Program.cs:
namespace dotnet.console.app
{
使用System.Threading.Tasks;
使用Microsoft.Extensions.DependencyInjection;
使用Microsoft.Extensions.Hosting;
使用Serilog;
班级计划
{
静态任务主(字符串[]参数)=>
CreateHostBuilder(args).Build().RunAsync();
静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureServices((u,services)=>
services.AddHostedService()
.AddLogging(生成器=>
{
变量记录器=新记录器配置()
.MinimumLevel.Debug()
.WriteTo.Console()
.CreateLogger();
建造