在C#中使用MS SQL Server实现自定义IConfiguration提供程序

目录

介绍

背景

设置项目

重新加载配置数据

结论


介绍

在现代软件开发领域,配置管理在确保应用程序的灵活性、可扩展性和可维护性方面发挥着关键作用。Microsoft.NET生态系统通过IConfiguration接口提供了一个强大的配置框架,允许开发人员访问来自各种来源的配置数据。但是,在处理复杂系统或企业级应用程序时,可能需要针对特定要求量身定制的自定义配置提供程序。

在本文中,我们将探讨利用MS SQL Server存储配置数据的自定义IConfiguration提供程序的实现。此解决方案的优势在于将配置设置集中在数据库中,无需重新启动应用程序即可实现动态更新。

背景

配置提供程序允许开发人员从各种源(例如JSON文件、环境变量和Azure Key Vault)检索配置数据。这些配置源被抽象在统一的API后面。

有用的链接:

Implement a custom configuration provider - .NET | Microsoft Learn

设置项目

出于演示目的,让我们考虑一个空的默认ASP.NET项目。我们将在此项目中实现名为SQLConfigurationProvider的自定义配置提供程序。为了与SQL数据库进行交互,我们将使用Dapper,这是一个适用于.NET的轻量级对象关系映射(ORM)库。

namespace SQLConfigurationProvider;

public class SqlServerConfigurationProvider : ConfigurationProvider, IDisposable
{
    private SqlServerConfigurationSource _source { get; }

    private readonly Timer? _timer;

    public SqlServerConfigurationProvider(SqlServerConfigurationSource source)
    {
        _source = source;

        if (_source.ReloadPeriodically)
        {
            _timer = new Timer
            (
                callback: ReloadSettings,
                dueTime: TimeSpan.FromSeconds(10),
                period: TimeSpan.FromSeconds(_source.PeriodInSeconds),
                state: null
            );
        }
    }

    public override void Load()
    {
        using var connection = new SqlConnection(_source.ConnectionString);

        //TODO Just a sample of query and set prop
        var myConfigurationOnSQL = connection.Query("select * from 1").ToDictionary(x => (string)x.Key, x => (string)x.Value);
        Data = myConfigurationOnSQL;

    }

    private void ReloadSettings(object? state)
    {
        Load();
        OnReload();
    }

    public void Dispose()
    {
        _timer?.Dispose();
    }
}

重新加载配置数据

可靠的配置提供程序的主要功能之一是能够在不重新启动应用程序的情况下重新加载配置数据。为了使用SQLConfigurationProvider实现这一点,我们实现了一种机制来定期刷新数据库中的配置数据。

结论

在本文中,我们探讨了使用MS SQL Server作为存储后端的自定义IConfiguration提供程序的实现。通过利用Dapper进行数据库交互,我们创建了一个灵活的解决方案,允许动态配置更新,而无需重新启动应用程序。此方法对于具有复杂配置要求的企业级应用程序特别有用。

https://www.codeproject.com/Tips/5379613/Implementing-a-Custom-IConfiguration-Provider-with

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值