📅  最后修改于: 2023-12-03 14:57:43.986000             🧑  作者: Mango
在开发 .NET Core Worker Service 项目时,经常需要读取应用程序配置信息。在本文中,我们将介绍如何在 C# 中读取配置信息。
.NET Core内置了处理配置的库,我们只需要在项目中添加以下依赖项即可:
<PackageReference Include="Microsoft.Extensions.Configuration" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="5.0.0" />
我们可以使用 JSON 格式来创建应用程序的配置文件。在项目根目录下创建 appsettings.json 文件,并添加以下内容:
{
"AppSettings": {
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;MultipleActiveResultSets=true",
"Interval": "00:00:30"
}
}
在应用程序的 Program.cs 文件中,我们需要添加以下代码来读取配置文件:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using System.IO;
namespace MyWorkerService
{
public class Program
{
public static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
IConfigurationRoot configuration = builder.Build();
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection, configuration);
var serviceProvider = serviceCollection.BuildServiceProvider();
serviceProvider.GetService<Worker>().Run();
}
private static void ConfigureServices(IServiceCollection services, IConfiguration configuration)
{
services.AddSingleton(configuration);
services.AddLogging(configure => configure.AddConsole());
services.AddHostedService<Worker>();
}
}
}
在上述代码中,我们首先使用 ConfigurationBuilder 类来创建 IConfiguration 存储 appsettings.json 文件中的设置。通过 Build 方法,我们可以返回 IConfigurationRoot,我们可以通过该方法来读取配置。
可以看到,在 ConfigureServices 方法中,我们将 IConfiguration 接口添加到集合中,以便在应用程序的 Worker 类中使用。我们还调用 AddLogging 和 AddHostedService 以启用应用程序日志记录和处理 .NET Core 的运行时生命周期。
在我们的 Worker 类中,我们需要注入 IConfiguration 接口以访问应用程序中的配置设置:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace MyWorkerService
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly IConfiguration _configuration;
public Worker(ILogger<Worker> logger, IConfiguration configuration)
{
_logger = logger;
_configuration = configuration;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var connectionString = _configuration.GetSection("AppSettings")["ConnectionString"];
var interval = _configuration.GetSection("AppSettings")["Interval"];
_logger.LogInformation($"ConnectionString: {connectionString}");
_logger.LogInformation($"Interval: {interval}");
await Task.Delay(5000, stoppingToken);
}
}
}
}
在上述代码中,我们使用 GetSection 和索引器操作符([])访问 appsettings.json 文件的值。 索引器操作符的参数是配置文件的节名称和设置名称。 在我们的示例中,该语法将返回 appsettings.json 文件的 AppSettings 节的 ConnectionString 设置。 确定配置值后,我们可以在应用程序中使用该值。
本文提供了一种读取 .NET Core Worker Service 项目中配置文件的方法。 我们使用 Microsoft.Extensions.Configuration 库来读取 appsettings.json 文件中的设置。 通过使用 IConfiguration 接口将应用程序的配置设置注入 Worker 类中,我们可以在应用程序的生命周期内使用这些值。