📜  读取配置 workerservice - C# (1)

📅  最后修改于: 2023-12-03 14:57:43.986000             🧑  作者: Mango

读取配置 Workerservice - C#

在开发 .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 类中,我们可以在应用程序的生命周期内使用这些值。