рдЪрд▓реЛ рдбреАрдбреАрдбреА рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдмрд╛рдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдореИрдВ рдЖрд╡реЗрджрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рдВрдЧрдарди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд╕рд░рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред
рдЕрдкрдиреЗ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж рдФрд░ рдореИрдВрдиреЗ .NET рдХреЛрд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдпрд╣ рдкреНрд░рд╢реНрди рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдирдП рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рд░реВрдкрд╛рдВрддрд░рдг рдХреИрд╕реЗ рдХрд░реЗрдВ, рдЖрджрд┐ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХрдИ рдиреЗ рдЗрд╕рдХрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред
public IConfiguration Configuration { get; set; } public IHostingEnvironment Environment { get; set; } public Startup(IConfiguration configuration, IHostingEnvironment environment) { Environment = environment; Configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .AddJsonFile($"appsettings.{Environment.EnvironmentName}.json") .Build(); }
рд▓реЗрдХрд┐рди рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХрд┐рди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЬрд┐рд╕рдореЗрдВ .NET рдХреЛрд░ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╣реИред рдореИрдВ рдмрд┐рд▓реНрд▓реА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБред
рдЬреИрд╕рд╛ рдкрд╣рд▓реЗ рдерд╛
рдХрд┐рд╕реА рднреА рдХрд╣рд╛рдиреА рдХреА рддрд░рд╣, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдПрдХ рд╢реБрд░реБрдЖрдд рд╣реИред ASP.NET рдХреЛрд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкрд╣рд▓реЗ рдореБрджреНрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдерд╛ред
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ web.config рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рдХреИрд╕реЗ рдерд╛
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рдереАрдВред рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ web.config рдереА , рдФрд░ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░реВрдкрд╛рдВрддрд░рдг ( web.Development.config , рдЖрджрд┐) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдереЗред рдЗрд╕реА рд╕рдордп, xml- рдбреЙрдХреНрдпреБрдореЗрдВрдЯ рдХреЗ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП xml- рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо ASP.NET Core рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, web.config рдлрд╝рд╛рдЗрд▓ рдХреЛ appsettings.json рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдм рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реИред
Google рд╣рдореЗрдВ рдХреНрдпрд╛ рдмрддрд╛рддрд╛ рд╣реИ?Google рдкрд░ "рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд┐рдВрдЧ рдЗрди рдПрдПрд╕рдкреА .рдиреЗрдЯ рдХреЛрд░" рдХрд╛ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрди рдХреЛрдб рдореЗрдВ рдЖрдпрд╛:
public IConfiguration Configuration { get; set; } public IHostingEnvironment Environment { get; set; } public Startup(IConfiguration configuration, IHostingEnvironment environment) { Environment = environment; Configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .AddJsonFile($"appsettings.{Environment.EnvironmentName}.json") .Build(); }
рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рд╣рдо рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдирдмреБрд▓рд╕реНрдЯреЗрд░ рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХреМрди рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдФрд░ рдРрд╕реЗ:
public IConfiguration Configuration { get; set; } public IHostingEnvironment Environment { get; set; } public Startup(IConfiguration configuration, IHostingEnvironment environment) { Environment = environment; Configuration = new ConfigurationBuilder() .AddJsonFile($"appsettings.{Environment.EnvironmentName}.json") .Build(); }
рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд░реЛрдд рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпреЗ рдЙрддреНрддрд░ рдЕрдХреНрд╕рд░ рдПрд╕рдУ рдФрд░ рдЕрдиреНрдп рдХрдо рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рднрд╛рд╡рдирд╛ рдирд╣реАрдВ рдЫреЛрдбрд╝реАред рдХрд┐ рд╣рдо рдЧрд▓рдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореИрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдпрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ? рдореБрдЭреЗ рд╣рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдпрд╣ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
рд╕рддреНрдп рдХреА рдЦреЛрдЬ рдореЗрдВ, рдореБрдЭреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдирд╛ рдкрдбрд╝рд╛ред рдФрд░ рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЬреНрдЮрд╛рди рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЖрдЗрдП рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди .NET рдХреЛрд░ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╡рд┐рдиреНрдпрд╛рд╕
.NET рдХреЛрд░ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдПрдХ IConfiguration рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
public interface IConfiguration { string this[string key] { get; set; } IConfigurationSection GetSection(string key); IEnumerable<IConfigurationSection> GetChildren(); IChangeToken GetReloadToken(); }
- [рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдВрдЬреА] рдЗрдВрдбреЗрдХреНрд╕рд░, рдЬреЛ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
- GetSection (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдВрдЬреА) рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреБрдВрдЬреА рджреЗрддрд╛ рд╣реИ рдЬреЛ рдореБрдЦреНрдп рдХреБрдВрдЬреА рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ
- GetChildren () рд╡рд░реНрддрдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдПрдХ рдЙрдкрдзрд╛рд░рд╛ рд╕реЗрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
- GetReloadToken () IChangeToken рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрджрд▓рдиреЗ рдкрд░ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд░реЛрдд (рдлрд╝рд╛рдЗрд▓, рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░) рд╕реЗ рдкрдврд╝рддреЗ рд╕рдордп, рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдбреЗрдЯрд╛ рдПрдХ рдлреНрд▓реИрдЯ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, json рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ
{ "Settings": { "Key": "I am options" } }
рдПрдХ рд╕рдорддрд▓ рджреГрд╢реНрдп рдореЗрдВ рдШрдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:
Settings:Key = I am options
рдпрд╣рд╛рдВ, рдХреБрдВрдЬреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИ: рдХреБрдВрдЬреА , рдФрд░ рдореВрд▓реНрдп I рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ ред
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рддрд╛
рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд░реЛрдд рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
IConfigurationProvider :
public interface IConfigurationProvider { bool TryGet(string key, out string value); void Set(string key, string value); IChangeToken GetReloadToken(); void Load(); IEnumerable<string> GetChildKeys(IEnumerable<string> earlierKeys, string parentPath); }
- TryGet (string key, out string value) рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
- рд╕реЗрдЯ (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдВрдЬреА, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- GetReloadToken () IChangeToken рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рд▓реЛрдб () рд╡рд┐рдзрд┐ рдЬреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд░реЛрдд рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ
- GetChildKeys (IEnumerable <string> рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХреЗрдХреЗ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрд░реЗрдВрдЯрдкреИрде) рдЖрдкрдХреЛ рдЙрди рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рджрд╛рддрд╛ рдмреЙрдХреНрд╕ рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
- Json
- рдЖрд░рдВ
- Xml
- рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░
- InMemory
- рдиреАрд▓рд╛
- рдХрд╕реНрдЯрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рддрд╛
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЙрд╕ рдХреНрд░рдо рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- рдпрджрд┐ рд╕рдорд╛рди рдХреБрдВрдЬреА рд╡рд┐рднрд┐рдиреНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ (рддреБрд▓рдирд╛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдирд╣реАрдВ рд╣реИ), рддреЛ рдЕрдВрддрд┐рдо рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рд╣рдо CreateDefaultBuilder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рддрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ:

- ChainedConfigurationProvider рдЗрд╕ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдк рдЙрди рдореВрд▓реНрдпреЛрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ
- JsonConfigurationProvider рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ json рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рддреАрди рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ appsettings.json рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ appsettings рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред {рдкрд░реНрдпрд╛рд╡рд░рдг} .json рддреАрд╕рд░рд╛ рд░рд╛рдЬрд╝ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд░рд┐рд▓реАрдЬрд╝ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рддреАрд╕рд░рд╛ рдкреНрд░рджрд╛рддрд╛ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд░рд╣рд╕реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ
- EnvironmentVariablesConfigurationProvider рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ
- CommandLineConfigurationProvider рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рдЪреВрдВрдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдХреБрдВрдЬреА рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ CommandLineConfigurationProvider рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдХреБрдВрдЬреА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рд╣реИ рдФрд░ JsonConfigurationProvider рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдкрд╛рд╕ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рд╣реИ, рддреЛ JsonConfigurationProvider рдХреЗ рддрддреНрд╡ рдХреЛ CommandLineConfigurationProvider рд╕реЗ рддрддреНрд╡ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдВрддрд┐рдо рдкрдВрдЬреАрдХреГрдд рд╣реИ рдФрд░ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИред
рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╛рдж рдХрд░реЗрдВ public IConfiguration Configuration { get; set; } public IHostingEnvironment Environment { get; set; } public Startup(IConfiguration configuration, IHostingEnvironment environment) { Environment = environment; Configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .AddJsonFile($"appsettings.{Environment.EnvironmentName}.json") .Build(); }
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╕реНрд╡рдпрдВ IConfiguration рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИред рдЬрдм рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд░реЛрддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдХрд╕реНрдЯрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рддрд╛
рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рддрд╛ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ IConfigurationProvider рдФрд░ IConfigurationSource рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред IConfigurationSource рдПрдХ рдирдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрднреА рддрдХ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирд╛ рд╣реИред
public interface IConfigurationSource { IConfigurationProvider Build(IConfigurationBuilder builder); }
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рдПрдХрд▓ рдмрд┐рд▓реНрдб рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИ рдЬреЛ IConfigurationBuilder рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреА рд╣реИ рдФрд░ IConfigurationProvider рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдирдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЙрдирдлрд┐рдЧрд░реЗрд╢рдирдкреНрд░реЙрдЗрдбрд░ рд╣рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдЗрди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ, TryGet , Set , GetReloadToken , GetChildKeys рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рддрд░реНрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рд▓реЛрдб рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред рдпрдорд▓ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрдврд╝рдирд╛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдпрд╣ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд┐рдП рдмрд┐рдирд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
YamlConfigurationProvider рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ FileConfigurationProvider рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдмрдирд╛рдПрдВ ред
public class YamlConfigurationProvider : FileConfigurationProvider { private readonly string _filePath; public YamlConfigurationProvider(FileConfigurationSource source) : base(source) { } public override void Load(Stream stream) { throw new NotImplementedException(); } }
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ, рдЖрдк FileConfigurationProvider рд╡рд░реНрдЧ рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ FileConfigurationSource рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ IFileProvider рд╣реЛрддрд╛ рд╣реИред IFileProvider рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдпрд╣ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд▓реЛрдб рд╡рд┐рдзрд┐ рдПрдХ рд╕реНрдЯреНрд░реАрдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реА рд╣реИред рдпрд╣ FileConfigurationProvider рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдФрд░ IConfigurationProvider рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдирд╣реАрдВ рд╣реИред
рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╣рдореЗрдВ рдпрдорд▓ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ YamlDotNet рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ ред
рдпрдорд▓рдХреЛрдирдлрд┐рдЧрд░реЗрд╢рдирдкреЙрдЗрдбрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди public class YamlConfigurationProvider : FileConfigurationProvider { private readonly string _filePath; public YamlConfigurationProvider(FileConfigurationSource source) : base(source) { } public override void Load(Stream stream) { if (stream.CanSeek) { stream.Seek(0L, SeekOrigin.Begin); using (StreamReader streamReader = new StreamReader(stream)) { var fileContent = streamReader.ReadToEnd(); var yamlObject = new DeserializerBuilder() .Build() .Deserialize(new StringReader(fileContent)) as IDictionary<object, object>; Data = new Dictionary<string, string>(); foreach (var pair in yamlObject) { FillData(String.Empty, pair); } } } } private void FillData(string prefix, KeyValuePair<object, object> pair) { var key = String.IsNullOrEmpty(prefix) ? pair.Key.ToString() : $"{prefix}:{pair.Key}"; switch (pair.Value) { case string value: Data.Add(key, value); break; case IDictionary<object, object> section: { foreach (var sectionPair in section) FillData(pair.Key.ToString(), sectionPair); break; } } } }
рд╣рдорд╛рд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ FileConfigurationSource рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
YamlConfigurationSource рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди public class YamlConfigurationSource : FileConfigurationSource { public YamlConfigurationSource(string fileName) { Path = fileName; ReloadOnChange = true; } public override IConfigurationProvider Build(IConfigurationBuilder builder) { this.EnsureDefaults(builder); return new YamlConfigurationProvider(this); } }
рдпрд╣рд╛рдВ рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ редEnsureDefaults (рдмрд┐рд▓реНрдбрд░) рд╡рд┐рдзрд┐ред
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ IConfigurationBuilder рдореЗрдВ рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк IConfigurationBuilder рд╕реЗ рдРрдб рдореЗрдердб рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рддреБрд░рдВрдд рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдпрдорд▓рдХреЛрдирдлрд┐рдЧрд░реЗрд╢рдирдкреЙрдЗрдбрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд▓реЙрдЬрд┐рдХ рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рджреВрдБрдЧрд╛ ред
YamlConfigurationExtensions рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ public static class YamlConfigurationExtensions { public static IConfigurationBuilder AddYaml( this IConfigurationBuilder builder, string filePath) { if (builder == null) throw new ArgumentNullException(nameof(builder)); if (string.IsNullOrEmpty(filePath)) throw new ArgumentNullException(nameof(filePath)); return builder .Add(new YamlConfigurationSource(filePath)); } }
AddYaml рдореЗрдердб рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((context, builder) => { builder.AddYaml("appsettings.yaml"); }) .UseStartup<Startup>(); }
рдЯреНрд░реИрдХрд┐рдВрдЧ рдмрджрд▓реЗрдВ
рдирдП рдПрдкреАрдЖрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, рдЬрдм рдпрд╣ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд░реЛрдд рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред рдЙрд╕реА рд╕рдордп, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреБрдирд░рд╛рд░рдВрдн рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
- рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рддрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд░реЛрдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ
- рдпрджрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдирдпрд╛ IChangeToken рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред
- рдЬрдм IChangeToken рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рддреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреБрдирдГ рд▓реЛрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЪрд▓рд┐рдП рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ FileConfigurationProvider рдореЗрдВ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ ред
ChangeToken.OnChange(
рдЪреЗрдВрдЬрдЯреЙрдХрди рд╕реНрдЯреЗрдЯрд┐рдХ рдХреНрд▓рд╛рд╕ рдХреЗ рдСрдирдЪреЗрдВрдЬ рдореЗрдердб рдореЗрдВ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдПрдХ рдирдпрд╛ IChangeToken рджреЗрддрд╛ рд╣реИ рдЬрдм рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд░реЛрдд (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдлрд╝рд╛рдЗрд▓) рдмрджрд▓рддрд╛ рд╣реИ, рдпрд╣ рддрдерд╛рдХрдерд┐рдд рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИ ред рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЙрд▓рдмреИрдХ (рдпрд╛ рдЙрдкрднреЛрдХреНрддрд╛ ) рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрд░реЛрдд рдмрджрд▓рдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
ChangeToken рд╡рд░реНрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВред
рд╕рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рддрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЯреНрд░реИрдХрд┐рдВрдЧ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рддрдВрддреНрд░ FileConfigurationProvider рдФрд░ AzureKeyVaultConfiguration.rovider рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
.NET рдХреЛрд░ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди, рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрдВрддреНрд░ рд╣реИред рдХрдИ рдРрдб-рдСрди рдмреЙрдХреНрд╕ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдХрдИ рдЪреАрдЬреЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВред
рдмреЗрд╢рдХ, рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рд╣реВрдВ рдХрд┐ рд▓реЛрдЧ рдЕрдкрдиреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреЗрд╡рд▓ рдореВрд▓ рдмрд╛рддреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдореВрд▓ рдмрд╛рддреЗрдВ, IOptions, рдкреЛрд╕реНрдЯ-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рддреНрдпрд╛рдкрди, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡рд╣ рдПрдХ рдФрд░ рдХрд╣рд╛рдиреА рд╣реИред
рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЬреАрдердм рдкрд░ рднрдВрдбрд╛рд░ рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ рдХрд┐ рдХреМрди рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдмрдВрдзрди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ?
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдЕрджреНрдпрддрди ред: рдЬреИрд╕рд╛ рдХрд┐ AdAbsurdum рдиреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ, рдЬрдм рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рддрддреНрд╡реЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рджреЛ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдорд░реНрдЬ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЬрдм рд╣рдо appsettings.json рд╕реЗ рдПрдХ рд╕рд░рдгреА рдкрдврд╝рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдпрд╣ рд╕рдкрд╛рдЯ рджреГрд╢реНрдп рдорд┐рд▓рддрд╛ рд╣реИ:
array:0=valueA
рдЬрдм appsettings.Development.json рд╕реЗ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ:
array:0=valueB array:1=value
рдирддреАрдЬрддрди, рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реЛрдЧрд╛:
array:0=valueB array:1=value
рдЕрджреНрд╡рд┐рддреАрдп рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдореЗрдВ 1 ) рд╡рд╛рд▓реЗ рд╕рднреА рддрддреНрд╡ рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВрдЧреЗред рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдиреНрдпрд╛рд╕ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рддрддреНрд╡, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕реВрдЪрдХрд╛рдВрдХ (рдЙрджрд╛рд╣рд░рдг рдореЗрдВ 0 ) рд╣реЛрдиреЗ рд╕реЗ рд╡рд┐рд▓рдп рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЕрдВрддрд┐рдо рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред