【发布时间】:2021-07-01 00:14:28
【问题描述】:
在尝试查找有关 DI 的信息并登录 .NET 5.0 控制台应用程序几个小时后,我在 Program 类中拼凑了以下代码。与网络应用程序上的信息相比,此类信息非常稀缺:
private static void BuildConfig(IConfigurationBuilder builder)
{
builder.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
.AddEnvironmentVariables();
}
private static void ConfigureServices(ServiceCollection serviceCollection, ILogger logger)
{
serviceCollection
.AddLogging(builder => builder.AddSerilog(logger))
.AddSingleton<ApplicationService>();
}
public static async Task<int> Main(string[] args)
{
// Setup config
var builder = new ConfigurationBuilder();
BuildConfig(builder);
// Setup logging
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(builder.Build())
.CreateLogger();
// Setup Dependency Injection
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection, Log.Logger);
var serviceProvider = serviceCollection.BuildServiceProvider();
// Use dependency injection
var applicationService = serviceProvider.GetRequiredService<ApplicationService>();
var runResult = await applicationService.RunAsync(args);
return runResult;
}
当我尝试运行我的应用时,我收到以下错误:
System.InvalidOperationException: '无法解析服务类型 尝试激活时出现“Serilog.ILogger” 'DalBuilder.Lib.ApplicationService'。'
【问题讨论】:
-
很可能在
ApplicationService构造函数中使用了错误的记录器。重构使用内置记录器ILogger<ApplicationService>
标签: logging dependency-injection console-application .net-5 serilog