Asp.net
閱讀 appsettings.json 貴嗎?
目前我正在開發一個 .net core 2 應用程序,該應用程序應該從 appsettings.json 讀取基於域的每個請求的一些鍵。(我不得不提一下,我有一個包含 3 個共享相同 appsettings.json 的項目的解決方案)我擔心 appsettings.json 文件在每個請求上的讀取時間。應用程序啟動時是否會記憶體此文件?我的啟動建構子如下:
public IConfiguration Configuration { get; } private readonly ILoggerFactory _logger; public Startup(IHostingEnvironment env, ILoggerFactory logger) { string settingPath = Path.GetFullPath(Path.Combine(@"../SharedConfig/globalAppSettings.json")); var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile(settingPath) .AddEnvironmentVariables(); Configuration = builder.Build(); _logger = logger; }
配置 API 使用使用來自之前註冊的源集的鍵和值
IConfigurationBuilder.Build建構的方法構造鍵和值。IConfiguration如果簡單地說,實現了以下機制:
- 在內部,特定的提供者用於從註冊的源中讀取。基於文件的源具有適當的
FileConfigurationProvider. 對於 JSON 文件,這是一個JsonConfigurationProvider.IConfigurationBuilder.Build方法為每個註冊的源構造提供者並呼叫該provider.Load方法。Load``Provider.Data從源讀取數據並填充鍵值對的內部集合(更具體的字典)。Data當您需要在應用程序中通過鍵獲取值時,Configuration API 會使用此集合。當 Configuration API 創建
FileConfigurationProvider實例時,它使用FileConfigurationSource.ReloadOnChange屬性的值(預設為 false)。如果此屬性為真,則提供者訂閱“文件更改”事件(在 ctor 中)以在Load每次文件更改時呼叫(並重新填充Data集合。來自github:if (Source.ReloadOnChange && Source.FileProvider != null) { ChangeToken.OnChange( () => Source.FileProvider.Watch(Source.Path), () => { Thread.Sleep(Source.ReloadDelay); Load(reload: true); }); }