C# 如何在.NET控制台应用程序中将Serilog注入到我的其余类中
我刚开始学习,但我不知道如何将依赖注入ILogger到我的类中。如果我使用的是ASP.NET Core 5,这很容易,但我使用的是.NET Core控制台应用程序。我该怎么做呢 在使用log4net之前: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
公共类测试策略
{
私有静态只读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();
建造