.NET5修改配置不重啟自動(dòng)生效的實(shí)現(xiàn)
.NET Core,.NET5默認(rèn)配置都是只加載一次,修改配置時(shí)都需要重啟才能生效,如何能修改即時(shí)生效呢,下面來演示一遍。
一、設(shè)置配置文件實(shí)時(shí)生效
1.1配置
在Program.cs的CreateHostBuilder()處增加加載配置文件的時(shí)候,reloadOnChange:true。
這樣配置文件修改的時(shí)候,程序就會監(jiān)聽到文件發(fā)生變化,自動(dòng)重新加載了。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
1.2驗(yàn)證
appsettings.json文件內(nèi)容如下
{
"TestSetting": "123",
"AppOptions": {
"UserName": "zhangsan"
}
}
代碼:
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly IConfiguration _configuration;
public HomeController(ILogger<HomeController> logger, IConfiguration configuration)
{
_logger = logger;
_configuration = configuration;
}
public IActionResult Index()
{
string Name = _configuration["TestSetting"];
string Name2 = _configuration["AppOptions:UserName"];
ViewBag.Name = Name;
ViewBag.Name2 = Name2;
return View();
}
}
界面顯示:

把配置文件修改為:
{
"TestSetting": "abc",
"AppOptions": {
"UserName": "zhangsan123"
}
}
刷新頁面,已經(jīng)發(fā)生變化:

1.3 IOptions方式實(shí)時(shí)生效
新建AppOptions.cs類
/// <summary>
/// 配置文件
/// </summary>
public class AppOptions
{
public string UserName { get; set; }
}
在Startup.cs處把配置加到Options
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.Configure<AppOptions>(Configuration.GetSection("AppOptions"));
}
使用:
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly IConfiguration _configuration;
private AppOptions _options;
public HomeController(ILogger<HomeController> logger, IConfiguration configuration, IOptionsMonitor<AppOptions> appOptions)
{
_logger = logger;
_configuration = configuration;
_options = appOptions.CurrentValue;
}
public IActionResult Index()
{
string Name = _configuration["TestSetting"];
string Name2 = _options.UserName;
ViewBag.Name = Name;
ViewBag.Name2 = Name2;
return View();
}
}
IOptions有三種方式
//IOptions<T> //站點(diǎn)啟動(dòng)后,獲取到的值永遠(yuǎn)不變 //IOptionsMonitor<T> //站點(diǎn)啟動(dòng)后,如果配置文件有變化會發(fā)布事件 (加載配置時(shí),reloadOnChange:true 必須為true) //IOptionsSnapshot<T> //站點(diǎn)啟動(dòng)后,每次獲取到的值都是配置文件里的最新值 (加載配置時(shí),reloadOnChange:true 必須為true)
注意:
在 AddSingleton Services中使用 IOptionsMonitor<T>也是無法實(shí)現(xiàn)配置立即生效的,而IOptionsSnapshot<T>啟動(dòng)就會報(bào)錯(cuò)。
例:
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private UserService _userService;
public HomeController(ILogger<HomeController> logger, UserService userService)
{
_userService = userService;
}
public IActionResult Index()
{
string Name2 = _userService.GetName();
ViewBag.Name2 = Name2;
return View();
}
}
public class UserService
{
private AppOptions _options;
public UserService(IOptionsMonitor<AppOptions> appOptions)
{
_options = appOptions.CurrentValue;
}
public string GetName()
{
var Name = _options.UserName;
return Name;
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.Configure<AppOptions>(Configuration.GetSection("AppOptions"));
services.AddSingleton<UserService>();
}
上面的UserService是單例注入的,通過IOptions的方式是實(shí)現(xiàn)不了配置實(shí)時(shí)刷新的,這種情況只能通過1.2中的 _configuration["AppOptions:UserName"]; 方式獲取才能實(shí)現(xiàn)。
所以,這幾種方式要根據(jù)情景變換使用。
1.4多個(gè)配置文件加載實(shí)時(shí)生效
增加多一個(gè)db配置文件

修改Program.cs處CreateHostBuilder(),也是加載時(shí)加上reloadOnChange:true 就可以了。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
config.AddJsonFile("Configs/dbsetting.json", optional: true, reloadOnChange: true);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
使用也是一樣的:
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly IConfiguration _configuration;
private AppOptions _options;
public HomeController(ILogger<HomeController> logger, IConfiguration configuration, IOptionsMonitor<AppOptions> appOptions)
{
_logger = logger;
_configuration = configuration;
_options = appOptions.CurrentValue;
}
public IActionResult Index()
{
string Name = _configuration["TestSetting"];
string Name2 = _configuration["db:connection1"];
ViewBag.Name = Name;
ViewBag.Name2 = Name2;
return View();
}
}
到此這篇關(guān)于.NET5修改配置不重啟自動(dòng)生效的文章就介紹到這了,更多相關(guān).NET5修改配置不重啟自動(dòng)生效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
asp.net 保存、修改沒有 runat=server控件的控件值的一個(gè)解決方案
asp.net 保存、修改沒有 runat=server控件的控件值的一個(gè)解決方案,需要的朋友可以參考下。2011-10-10
Linq中ToList()和CopyToDataTable()用法詳解
這篇文章介紹了Linq中ToList()和CopyToDataTable()的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
MVC微信網(wǎng)頁授權(quán)獲取用戶OpenId
這篇文章主要為大家詳細(xì)介紹了MVC微信網(wǎng)頁授權(quán),在模板頁中獲取用戶openid,感興趣的小伙伴們可以參考一下2016-09-09
ASP.Net MVC 布局頁、模板頁使用方法詳細(xì)介紹
這篇文章主要介紹了ASP.Net MVC 布局頁、模板頁使用方法詳細(xì)介紹,需要的朋友可以參考下2017-08-08
.Net Core中使用Quartz.Net實(shí)踐記錄
Quartz.NET是一套很好的任務(wù)調(diào)度框架。下面這篇文章主要給大家介紹了關(guān)于.Net Core中使用Quartz.Net的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
ajaxToolkit:AccordionPane演示與應(yīng)用實(shí)例
ajaxToolkit:AccordionPane演示與應(yīng)用實(shí)例,需要的朋友可以參考一下2013-04-04
asp.net 網(wǎng)絡(luò)硬盤實(shí)現(xiàn)分析
隨著網(wǎng)絡(luò)技術(shù)的日益普及和信息化建設(shè)的重視,網(wǎng)絡(luò)硬盤作為一種新型安全的網(wǎng)絡(luò)存儲系統(tǒng),已越來越受到人們的重視和喜歡。2011-02-02

