Pre 很早在看 Jesse 的 Asp.net Core快速入门 的课程的时候就了解到了在Asp .net core中,如果添加的Json配置被更改了,是支持自动重载配置的,作为一名有着严重”造轮子”情节的程序员,最近在折腾一个博客系统,也想造出一个这样能自动更新以Mysql为数据源的ConfigureSource,于是点开了AddJsonFile这个拓展函数的源码,发现别有洞天,蛮有意思,本篇文章就简单地聊一聊Json config的ReloadOnChange是如何实现的,在学习ReloadOnChange的过程中,我们会把Configuration也顺带撩一把:grin:,希望对小伙伴 在.NET Core中,JSON配置文件的自动更新是一个非常实用的功能,尤其对于开发环境而言,能够实时反映配置文件的更改,而无需重启应用。这个特性在ASP.NET Core框架中被广泛使用,通过`AddJsonFile`扩展方法实现。下面我们将深入探讨`AddJsonFile`的工作原理以及`ReloadOnChange`如何实现。 我们来看`AddJsonFile`的基本用法。在ASP.NET Core的启动配置中,通常会有如下代码: ```csharp public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration(options => options.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)) .UseStartup<Startup>(); ``` 这段代码中,`reloadOnChange`属性被设置为`true`,表示当`appsettings.json`文件发生改变时,配置应自动重新加载。让我们逐步解析`AddJsonFile`背后的工作流程。 1. `AddJsonFile`方法的实现实际上是一个链式调用,它首先接收路径、可选性和是否自动重新加载等参数。 2. 当`AddJsonFile`被调用时,会创建一个`JsonConfigurationSource`实例,并根据传入的参数进行初始化。`JsonConfigurationSource`包含了文件提供者(`IFileProvider`)、文件路径、是否可选以及是否开启自动重载等信息。 3. 接着,`AddJsonFile`将配置委托给`JsonConfigurationSource`,通过`Action<JsonConfigurationSource>`进一步定制配置源。 4. 最终,`AddJsonFile`会调用`Add<TSource>`方法,创建并添加`JsonConfigurationSource`实例到配置构建器(`IConfigurationBuilder`)中。 `JsonConfigurationSource`实例化后,其内部的`IFileChangeToken`(文件变更令牌)会监听配置文件的变化。`IFileChangeToken`接口提供了`HasChanged`事件,当配置文件被修改时,事件会被触发。 关键在于`IConfigurationBuilder`添加配置源时,它会注册一个监听器,当`HasChanged`事件触发时,`Configuration`会重新加载来自`JsonConfigurationSource`的数据。`IFileChangeToken`的实现通常会依赖于文件系统的监视服务,如Windows的`FileSystemWatcher`,用于检测文件变更。 为了使`reloadOnChange`生效,`.NET Core`会创建一个后台线程来定期检查文件的更改,或者利用操作系统提供的异步文件变更通知。一旦检测到文件变更,`IFileChangeToken`的`HasChanged`事件就会被触发,进而触发配置的重新加载。 理解了这个机制后,你可以自定义配置源,实现类似的功能,例如监听MySQL数据库中的配置变化。这需要创建一个自定义的`IConfigurationSource`,并实现相应的文件或数据库变更检测机制。 总结一下,.NET Core中的JSON配置自动更新主要通过以下步骤实现: 1. 使用`AddJsonFile`方法添加配置源,设置`reloadOnChange`为`true`。 2. 创建`JsonConfigurationSource`实例,并配置文件路径、是否可选以及文件提供者。 3. `JsonConfigurationSource`内部的`IFileChangeToken`监听文件变化。 4. 文件变更时,触发`HasChanged`事件,配置被重新加载。 这个设计使得开发者可以方便地跟踪和响应配置文件的更改,提高开发效率。理解这个过程不仅有助于你使用.NET Core的配置系统,还能帮助你创建自定义的配置源,适应更复杂的应用场景。
- 粉丝: 347
- 资源: 2万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0