Cod*_*der 1 asp.net caching asp.net-core asp.net-core-2.0
当前,我正在开发一个.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;
}
Run Code Online (Sandbox Code Playgroud)
Configuration API使用以下IConfigurationBuilder.Build方法构造键和值:该方法使用IConfiguration之前注册的源集中的键和值进行构建。
如果简要地说,将实现以下机制:
FileConfigurationProvider。对于JSON文件,这是一个JsonConfigurationProvider。IConfigurationBuilder.Build方法为每个注册的源构造提供程序,并调用该provider.Load方法。Load从源中读取数据,并填充Provider.Data键值对的内部集合(更具体的说是字典)。Data然后,当您需要通过应用程序中的键获取值时,Configuration API会使用此集合。当Configuration API创建FileConfigurationProvider实例时,它将使用FileConfigurationSource.ReloadOnChange属性的值(默认情况下为false)。如果此属性为true,则提供者订阅“文件更改”事件(在ctor中),以在Load每次文件更改时调用(并因此重新填充Data集合。来自github:
if (Source.ReloadOnChange && Source.FileProvider != null)
{
ChangeToken.OnChange(
() => Source.FileProvider.Watch(Source.Path),
() => {
Thread.Sleep(Source.ReloadDelay);
Load(reload: true);
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
671 次 |
| 最近记录: |