使用 JSON 和依赖项注入增强 .NET Core 配置管理

作者:微信公众号:【架构师老卢】
3-18 10:8
30

概述:在 .NET Core 生态系统中,利用 JSON 文件进行配置管理可提高灵活性和易维护性。本文将引导你完成一种全面的方法,将 JSON 设置反序列化为 C# 类对象,使用具有依赖项注入的接口访问这些设置,并将配置数据封装在数据传输对象 (DTO) 中,以便进行干净高效的访问。IConfiguration在 .NET Core 中取消 JSON 设置,图片来源:由作者创建我们将用一个实际的例子来说明这些概念。构建 JSON 配置文件第一步涉及设置一个 JSON 文件来保存应用程序的配置设置。为了演示,我们按照 .NET Core 约定将此文件命名为 。appsettings.json{  

在 .NET Core 生态系统中,利用 JSON 文件进行配置管理可提高灵活性和易维护性。

本文将引导你完成一种全面的方法,将 JSON 设置反序列化为 C# 类对象,使用具有依赖项注入的接口访问这些设置,并将配置数据封装在数据传输对象 (DTO) 中,以便进行干净高效的访问。IConfiguration

在 .NET Core 中取消 JSON 设置,图片来源:由作者创建

我们将用一个实际的例子来说明这些概念。

构建 JSON 配置文件

第一步涉及设置一个 JSON 文件来保存应用程序的配置设置。

为了演示,我们按照 .NET Core 约定将此文件命名为 。appsettings.json

{  
  "ApplicationSettings": {  
    "AppName": "MyDotNetApp",  
    "Version": "1.0.0",  
    "Environment": "Development",  
    "FeatureToggles": {  
      "EnableFeatureX": true,  
      "EnableFeatureY": false  
    }  
  }  
}

此 JSON 结构表示一组简单的配置,包括应用程序名称、版本、环境和功能切换。

创建配置 POCO 类

为了将 JSON 设置反序列化为 C# 对象,我们定义了镜像 JSON 结构的 POCO(普通旧 CLR 对象)类。

public class ApplicationSettings  
{  
    public string AppName { get; set; }  
    public string Version { get; set; }  
    public string Environment { get; set; }  
    public FeatureToggles FeatureToggles { get; set; }  
}  
  
public class FeatureToggles  
{  
    public bool EnableFeatureX { get; set; }  
    public bool EnableFeatureY { get; set; }  
}

这些类提供了与 JSON 配置的直接映射,便于轻松反序列化。

实现 IConfiguration 的依赖关系注入

.NET Core 的内置依赖项注入框架对于实现分离且易于测试的代码至关重要。为了用于访问我们的 JSON 设置,我们在应用程序启动中对其进行配置。IConfiguration

Startup.cs(ConfigureServices 方法):

public void ConfigureServices(IServiceCollection services)  
{  
    // Configure binding to the ApplicationSettings section of appsettings.json  
    var appSettingsSection = Configuration.GetSection("ApplicationSettings");  
    services.Configure<ApplicationSettings>(appSettingsSection);  
  
    // Other services  
}

通过 DTO 访问配置

数据传输对象 (DTO) 可用于在层之间封装和传输数据。我们将创建一个类,以便轻松访问我们的配置设置。SettingsDto

public class SettingsDto  
{  
    private readonly ApplicationSettings _appSettings;  
  
    public SettingsDto(IOptions<ApplicationSettings> appSettings)  
    {  
        _appSettings = appSettings.Value;  
    }  
  
    // Properties for direct access  
    public string AppName => _appSettings.AppName;  
    public string Version => _appSettings.Version;  
    public string Environment => _appSettings.Environment;  
    public bool FeatureXEnabled => _appSettings.FeatureToggles.EnableFeatureX;  
    public bool FeatureYEnabled => _appSettings.FeatureToggles.EnableFeatureY;  
}

要通过依赖项注入提供,请在SettingsDtoConfigureServicesStartup.cs.

services.AddTransient<SettingsDto>();

控制器中的示例用法

设置完成后,访问我们的应用程序设置变得简单明了。下面是一个演示其用法的示例控制器:SettingsDto

SampleController.cs

[ApiController]
[Route("[controller]")]
public class SampleController : ControllerBase
{
    private readonly SettingsDto _settingsDto;

    public SampleController(SettingsDto settingsDto)
    {
        _settingsDto = settingsDto;
    }

    [HttpGet]
    public IActionResult GetSettings()
    {
        return Ok(new
        {
            AppName = _settingsDto.AppName,
            Version = _settingsDto.Version,
            Environment = _settingsDto.Environment,
            FeatureXEnabled = _settingsDto.FeatureXEnabled,
            FeatureYEnabled = _settingsDto.FeatureYEnabled
        });
    }
}

通过注入到我们的控制器中,我们可以轻松地将所需的设置作为属性访问,使控制器操作简洁明了。SettingsDto

通过采用这种方法,我们可以享受一种更干净、更有条理和可维护的方式来处理配置设置,从而增强其应用程序的整体架构和设计。

相关留言评论
昵称:
邮箱:
阅读排行