Asp.net核心重装应用程序配置介绍
我将配置放在数据库或Redis中。当需要修改配置时,我需要直接修改数据库,然后调用一个接口来重载应用程序配置,所以我尝试在运行时编写一个接口来重载配置。
配置重新加载实现
重新加载已配置的接口实际上非常简单。查看Configuration的源代码可以知道,如果要重新加载应用程序配置,需要一个iconfigulationroot对象,但是iconfigulationroot实际上可以直接取注入到服务中的iconfigulationroot对象,服务中的iconfigurationObject也是实现iconfigulationroot接口的实例。稍后,我们将更清楚地看到源代码。
看看实现重载配置的代码
使用微软。AspNetCore . Mvc使用微软。扩展。配置;命名空间TestWebApplication。控制器{[路由(' API/[控制器]')]公共类配置控制器:控制器{私有只读图标配置根_配置;公共配置控制器(icon configuration configuration){ _ configuration=配置为IConfigurationRoot}[http get]public interaction result get(){返回ok (new {rootuser=_ configuration。GetAppSetting(' root user ')//其中GetAppSetting是获取AppSettings节点下配置信息的自定义扩展方法});}[httput]public IActionResult Put(){ _ configuration。重载();返回Ok();}}}很简单吗?让我们试试。您可以参考这个示例项目
因为默认的项目配置将监控appsettings.json文件是否被修改,如果被修改,它将被重新加载。在这里,我添加了一个新文件,并将reloadOnChange设置为false。示例代码如下:
公共静态IWebHostBuilder CreateWebHostBuilder(字符串[]参数)=WebHost。CreateDefaultBuilder(args)。ConfigureAppConfiguration(config builder={ config builder。AddJsonFile('abc.json ',optional: true,ReLoadOnchange : false);}) .UseStartupStartup();abc.json的文件内容如下:
{ ' appsettings ' : { ' testnumber ' : 12,' root user' : '李维汉' }} dotnet run启动网站,然后在浏览器中访问http://localhost 33605000/API/configurations。
然后我们修改abc.json文件
{ ' appsettings ' : { ' testnumber ' : 12,' root user' : '李维汉123'}}修改保存后,刷新上一页,可以看到还是和之前一样,证明配置没有重新加载。然后试试我们的重装配置方法。
使用邮递员或提琴手或其他喜欢的工具向http://localhost 33605000/API/配置发送PUT请求。这里我使用postman调用PUT接口来重新加载配置
如果返回200,则接口调用成功。通过刚才刷新页面可以看到页面上的数据发生了变化,证明重新加载配置好的界面是有效的。
源代码解析
让我们看看配置生成器在构建时做了什么,配置生成器源代码
您可以看到这里最后返回的是一个iconfigulationroot对象,然后查看iconfigulationroot源代码
您可以看到IConfigurationRoot定义了一个重载方法,该方法将从以下提供程序重载配置。这里我们知道,应用程序配置可以通过IConfiguration的reload方法重新加载。那我们来看看什么是Webhost。createDefaultBuilder (args)。build()已经完成。https://github。com/aspnet/aspnet core/blob/master/src/default builder/src/web host。铯
这里我们可以看到为什么appsettings.json文件会自动重新加载,我们可以看到最终返回了一个WebHostBuilder对象
看看aspnet核心webhostbuilder对象的构建方法https://github.com/aspnet/aspnetcore/blob/master/src/hosting/hosting/src/webhostbuilder . cs
你可以在BuildCommonServices中看到这样一段代码https://github.com/aspnet/aspnetcore/blob/master/src/hosting/hosting/src/webhostbuilder . cs
正如我们上面已经知道的,在ConfigurationBuilder Build之后,它返回一个iconfigurationroot对象,这里它注入一个iconfigulationroot对象(iconfigulationroot实现iconfigulation接口)。因此,我们可以从依赖注入中获取IConfiguration对象,并直接将其用作iconfigulationroot,这就是为什么我们直接将iconfigulationroot作为iconfigulationroot来获取iconfigulation对象
备忘录
暂时到此为止,希望你能有所收获~
以上是边肖介绍的ASP.NET Core重装应用配置的详细讲解和集成,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!