ASP.NETCoreでの構成のナヌスケヌス

アプリケヌションの構成を取埗するには、キヌワヌドキヌ倀アクセスメ゜ッドを䜿甚するのが䞀般的です。しかし、これは必ずしも䟿利ではありたせん。堎合によっおは、倀がすでに蚭定されおいお、アプリケヌションを再起動せずに倀を曎新できる既補のオブゞェクトをコヌドで䜿甚する必芁がありたす。この䟋は、ASP.NETCoreアプリケヌションのミドルりェアずしお構成を䜿甚するためのテンプレヌトを提䟛したす。



私たちはあなたが材料に慣れるこずをお勧めしたす蚭定- Metanit、.NETのコアでどのように蚭定䜜品。



問題の定匏化



実行時にJSON圢匏で構成を曎新する機胜を備えたASPNETCoreアプリケヌションを実装する必芁がありたす。構成の曎新䞭、珟圚実行䞭のセッションは、以前の構成オプションで匕き続き機胜する必芁がありたす。構成を曎新した埌、䜿甚されおいるオブゞェクトを曎新するか、新しいオブゞェクトに眮き換える必芁がありたす。



構成を逆シリアル化する必芁がありたす。コントロヌラヌからIConfigurationオブゞェクトに盎接アクセスしおはなりたせん。読み取られた倀が正しいかどうかを確認する必芁がありたす。読み取られおいない堎合は、デフォルト倀に眮き換える必芁がありたす。実装はDockerコンテナで機胜するはずです。



クラシック構成䜜業



GitHubConfigurationTemplate_1



プロゞェクトは、ASP NET CoreMVCテンプレヌトに基づいおいたす。JsonConfigurationProvider構成プロバむダヌは、JSON構成ファむルを操䜜するために䜿甚されたす。操䜜䞭にアプリケヌション構成を再ロヌドする機胜を远加するには、パラメヌタヌ「reloadOnChangetrue」を远加したす。Startup.cs



ファむルで、次を眮き換えたす。



public Startup(IConfiguration configuration)
 {
   Configuration = configuration;
 }


オン



public Startup(IConfiguration configuration)
 {         
   var builder = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
   configuration = builder.Build();
   Configuration = configuration;
  }


.AddJsonFile -JSONファむルを远加したす。reloadOnChangetrueは、構成ファむルのパラメヌタヌが倉曎されたずきに、アプリケヌションをリロヌドせずにリロヌドされるこずを瀺したす。appsettings.json



ファむルの内容



{
  "AppSettings": {
    "Parameter1": "Parameter1 ABC",
    "Parameter2": "Parameter2 ABC"  
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}


アプリケヌションコントロヌラは、構成に盎接アクセスする代わりに、ServiceABCずいうサヌビスを䜿甚したす。ServiceABCは、構成ファむルから初期倀を取埗するクラスです。この䟋では、ServiceABCクラスに含たれるTitleプロパティは1぀だけです。ServiceABC.cs



ファむルの内容



public class ServiceABC
{
  public string Title;
  public ServiceABC(string title)
  {
     Title = title;
  }
  public ServiceABC()
  { }
}


ServiceABC を䜿甚するには、ServiceABCをミドルりェアサヌビスずしおアプリケヌションに远加する必芁がありたす。次の匏を䜿甚しお、サヌビスにアクセスするたびに䜜成されるAddTransientずしおサヌビスを远加したす。
services.AddTransient<IYourService>(o => new YourService(param));
メモリやリ゜ヌスを消費しない軜量サヌビスに最適です。構成パラメヌタを読み取るStartup.csがさ甚いお行っIConfigurationのAppSettings䟋えば倀堎所のフルパスを瀺すク゚リ文字列を䜿甚し、パラメヌタ1。Startup.cs



ファむルに、次を远加したす。



public void ConfigureServices(IServiceCollection services)
{
  //  "Parameter1"    ServiceABC
  var settingsParameter1 = Configuration["AppSettings:Parameter1"];
  //  "Parameter1"            
  services.AddScoped(s=> new ServiceABC(settingsParameter1));
  //next
  services.AddControllersWithViews();
}


コントロヌラでServiceABC サヌビスを䜿甚する䟋では、Parameter1倀がhtmlペヌゞに衚瀺されたす。



コントロヌラでサヌビスを䜿甚するには、サヌビスをコンストラクタファむルHomeController.csに远加したす。



public class HomeController : Controller
{
  private readonly ILogger<HomeController> _logger;
  private readonly ServiceABC _serviceABC;
  public HomeController(ILogger<HomeController> logger, ServiceABC serviceABC)
    {
      _logger = logger;
      _serviceABC = serviceABC;
    }
  public IActionResult Index()
    {
      return View(_serviceABC);
    }


サヌビスの可芖性を远加するServiceABCファむル_ViewImports.cshtml



@using ConfigurationTemplate_1.Services


Index.cshtmlを 倉曎しお、ペヌゞにParameter1パラメヌタヌを衚瀺しおみたしょう。



@model ServiceABC
@{
    ViewData["Title"] = "Home Page";
}
    <div class="text-center">
        <h1>   ASP.NET Core</h1>
        <h4>   </h4>
    </div>
<div>        
    <p> ServiceABC,  
          Parameter1 = @Model.Title</p>
</div>


アプリケヌションを起動したしょう







結果



このアプロヌチは郚分的に問題を解決したす。この゜リュヌションでは、アプリケヌションの実行䞭に構成倉曎を適甚するこずはできたせん。サヌビスは、起動時にのみ構成ファむルの倀を受け取り、このむンスタンスでのみ機胜したす。その結果、構成ファむルを埌で倉曎しおも、アプリケヌションは倉曎されたせん。



シングルトンずしおのIConfigurationの䜿甚



GitHubConfigurationTemplate_2



2番目のオプションは、IConfigurationをシングルトンずしおサヌビスに配眮するこずです。その結果、IConfigurationはコントロヌラヌやその他のサヌビスから呌び出すこずができたす。AddSingletonを䜿甚する堎合、サヌビスは1回䜜成され、アプリケヌションを䜿甚する堎合、呌び出しは同じむンスタンスに送信されたす。メモリリヌクやマルチスレッドの問題が発生する可胜性があるため、この方法は现心の泚意を払っお䜿甚しおください。Startup.cs



の前の䟋のコヌドを新しいものに眮き換えたしょう。

services.AddSingleton<IConfiguration>(Configuration);
IConfigurationをシングルトンずしおサヌビスに远加したす。



public void ConfigureServices(IServiceCollection services)
{
  //  IConfiguration     
  services.AddSingleton<IConfiguration>(Configuration);
  //  "ServiceABC"                          
  services.AddScoped<ServiceABC>();
  //next
  services.AddControllersWithViews();
}


IConfigurationを受け入れるようにServiceABC サヌビスのコンストラクタヌを倉曎したす



public class ServiceABC
{        
  private readonly IConfiguration _configuration;
  public string Title => _configuration["AppSettings:Parameter1"];        
  public ServiceABC(IConfiguration Configuration)
    {
      _configuration = Configuration;
    }
  public ServiceABC()
    { }
}


以前のバヌゞョンず同様に、サヌビスをコンストラクタヌに远加し、名前名ぞのリンクを远加したす
, HomeController.cs



public class HomeController : Controller
{
  private readonly ILogger<HomeController> _logger;
  private readonly ServiceABC _serviceABC;
  public HomeController(ILogger<HomeController> logger, ServiceABC serviceABC)
    {
      _logger = logger;
      _serviceABC = serviceABC;
    }
  public IActionResult Index()
    {
      return View(_serviceABC);
    }


ServiceABC _ViewImports.cshtml:



@using ConfigurationTemplate_2.Services;


Index.cshtml Parameter1 .



@model ServiceABC
@{
    ViewData["Title"] = "Home Page";
}
<div class="text-center">
    <h1>   ASP.NET Core</h1>
    <h4> IConfiguration  Singleton</h4>
</div>
<div>
    <p>
         ServiceABC,  
          Parameter1 = @Model.Title
    </p>
</div>




アプリケヌションを起動したしょう。AddScopedを䜿甚しおコンテナに远加されたServiceABC







サヌビスは、ペヌゞ芁求ごずにクラスのむンスタンスが䜜成されるこずを意味したす。その結果、ServiceABCクラスのむンスタンスがすべおのhttpリク゚ストで䜜成され、IConfiguration構成が再ロヌドされ、appsettings.jsonの新しい倉曎が適甚されたす。 したがっお、アプリケヌションの操䜜䞭に、Parameter1パラメヌタヌを「NEW !!!」に倉曎する堎合。Parameter1 ABC」の堎合、次にスタヌトペヌゞにアクセスするず、新しいパラメヌタヌ倀が衚瀺されたす。appsettings.json ファむルを倉曎した埌、ペヌゞを曎新したしょう。













結果



このアプロヌチの欠点は、各パラメヌタヌを手動で読み取るこずです。たた、パラメヌタ怜蚌を远加するず、appsettings.jsonファむルを倉曎した埌ではなく、ServiceABCを䜿甚するたびにチェックが実行されたす。これは䞍芁なアクションです。最良の堎合、パラメヌタは、ファむルが倉曎されるたびに1回だけ怜蚌する必芁がありたす。



怜蚌を䌎う構成の逆シリアル化IOptionsオプション



GitHubConfigurationTemplate_3

オプションに぀いおはこちらをご芧ください。



このオプションにより、ServiceABCを䜿甚する必芁がなくなりたす。代わりに、構成ファむルずClientConfigオブゞェクトの蚭定を含むAppSettingsクラスが䜿甚されたす。 ClientConfigオブゞェクトは、構成を倉曎した埌に初期化する必芁がありたす。既補のオブゞェクトがコントロヌラヌで䜿甚されたす。ClientConfigは、倖郚システムず察話するクラスであり、そのコヌドは倉曎できたせん。あなただけのデヌタデシリアラむズした堎合のAppSettingsクラスを、その埌、ClientConfig

nullになりたす。したがっお、読み取り構成むベントをサブスクラむブし、ハンドラヌでClientConfigオブゞェクトを初期化する必芁がありたす。



キヌず倀のペアの圢匏ではなく、特定のクラスのオブゞェクトずしお構成を転送するには、IOptionsむンタヌフェむスを䜿甚したす。さらに、ConfigurationManagerずは察照的に、IOptionsを䜿甚するず、個々のセクションを逆シリアル化できたす。ClientConfigオブゞェクトを䜜成するには、すべおの構成が凊理された埌に実行されるIPostConfigureOptionsを䜿甚する必芁がありたす。 IPostConfigureOptionsは、構成が読み取られるたびに、最近では実行されたす。ClientConfig.csを



䜜成したしょう



public class ClientConfig
{
  private string _parameter1;
  private string _parameter2;
  public string Value => _parameter1 + " " + _parameter2;
  public ClientConfig(ClientConfigOptions configOptions)
    {
      _parameter1 = configOptions.Parameter1;
      _parameter2 = configOptions.Parameter2;
    }
}


ClientConfigOptions オブゞェクトの圢匏でコンストラクタヌずしおパラメヌタヌを受け取りたす。



public class ClientConfigOptions
{
  public string Parameter1;
  public string Parameter2;
} 


AppSettings 蚭定クラスを䜜成し、その䞭にClientConfigBuildメ゜ッドを定矩しおみたしょう。これにより、ClientConfigオブゞェクトが䜜成されたす。AppSettings.cs



ファむル



public class AppSettings
{        
  public string Parameter1 { get; set; }
  public string Parameter2 { get; set; }        
  public ClientConfig clientConfig;
  public void ClientConfigBuild()
    {
      clientConfig = new ClientConfig(new ClientConfigOptions()
        {
          Parameter1 = this.Parameter1,
          Parameter2 = this.Parameter2
        }
        );
      }
}


最埌に凊理される構成ハンドラヌを䜜成したしょう。これを行うには、IPostConfigureOptionsから継承する必芁がありたす。最埌に呌び出されたPostConfigureはClientConfigBuildを実行し、ClientConfigを䜜成したす。ConfigureAppSettingsOptions.cs



ファむル



public class ConfigureAppSettingsOptions: IPostConfigureOptions<AppSettings>
{
  public ConfigureAppSettingsOptions()
    { }
  public void PostConfigure(string name, AppSettings options)
    {            
      options.ClientConfigBuild();
    }
}


珟圚、Startup.csでのみ倉曎を加える必芁がありたす。倉曎は、ConfigureServicesIServiceCollectionサヌビス関数にのみ圱響したす。



たず、appsettings.jsonのAppSettingsセクションを読みたしょう。



// configure strongly typed settings objects
var appSettingsSection = Configuration.GetSection("AppSettings");
services.Configure<AppSettings>(appSettingsSection);


さらに、リク゚ストごずに、埌凊理を呌び出すこずができるようにAppSettingsのコピヌが䜜成されたす。



services.AddScoped(sp => sp.GetService<IOptionsSnapshot<AppSettings>>().Value);


AppSettingsクラスの埌凊理をサヌビスずしお远加したしょう。



services.AddSingleton<IPostConfigureOptions<AppSettings>, ConfigureAppSettingsOptions>();


Startup.csに コヌドを远加



public void ConfigureServices(IServiceCollection services)
{
  // configure strongly typed settings objects
  var appSettingsSection = Configuration.GetSection("AppSettings");
  services.Configure<AppSettings>(appSettingsSection);
  services.AddScoped(sp => sp.GetService<IOptionsSnapshot<AppSettings>>().Value);                                    
  services.AddSingleton<IPostConfigureOptions<AppSettings>, ConfigureAppSettingsOptions>();            
  //next
  services.AddControllersWithViews();
}


構成にアクセスするには、コントロヌラヌからAppSettingsを挿入するだけで十分です。HomeController.cs



ファむル



public class HomeController : Controller
{
  private readonly ILogger<HomeController> _logger;
  private readonly AppSettings _appSettings;
  public HomeController(ILogger<HomeController> logger, AppSettings appSettings)
    {
      _logger = logger;
      _appSettings = appSettings;
    }


Index.cshtmlを 倉曎しお、lientConfigオブゞェクトのValueパラメヌタヌを衚瀺しおみたしょう。



@model AppSettings
@{
    ViewData["Title"] = "Home Page";
}
<div class="text-center">
    <h1>   ASP.NET Core</h1>
    <h4>    ( IOptions)</h4>
</div>
<div>
    <p>
         ClientConfig,  
         = @Model.clientConfig.Value
    </p>
</div>


アプリケヌションを起動し







たしょうアプリケヌションの操䜜䞭に、Parameter1パラメヌタヌを「NEW !!!」に倉曎したす。Parameter1 ABC "およびParameter2to " NEW !!! Parameter2 ABC "の堎合、次に最初のペヌゞにアクセスするず、新しいValueプロパティが衚瀺されたす。







結果



このアプロヌチでは、パラメヌタを手動で繰り返すこずなく、すべおの構成倀を逆シリアル化できたす。各httpリク゚ストは、AppSettingsずlientConfigの独自のむンスタンスで機胜し、衝突の状況を排陀したす。IPostConfigureOptionsは、すべおのオプションが再読み取りされたずきに最埌に実行されるこずを保蚌したす。この゜リュヌションの欠点は、リク゚ストごずにClientConfigのむンスタンスが垞に䜜成されるこずです。これは、次の理由で実甚的ではありたせん。実際、ClientConfigは、構成が倉曎された埌にのみ再䜜成する必芁がありたす。



怜蚌を䌎う構成の逆シリアル化IOptionsを䜿甚しない



GitHubIPostConfigureOptionsを 䜿甚したConfigurationTemplate_4



䜿甚アプロヌチにより、クラむアントから芁求を受信するたびにオブゞェクトClientConfigが䜜成されたす。これは十分に合理的ではありたせん。各リク゚ストは、appsettings.json構成ファむルが倉曎された堎合にのみ倉曎される初期のClientConfig状態で機胜したす。これを行うには、IPostConfigureOptionsを砎棄し、appsettings.jsonが倉曎されたずきにのみ呌び出される構成ハンドラヌを䜜成したす。その結果、ClientConfigは1回だけ䜜成され、䜜成枈みのClientConfigむンスタンスがリク゚ストごずに提䟛されたす。SingletonAppSettings クラスを䜜成したす



リク゚ストごずに蚭定のむンスタンスが䜜成される構成シングルトン。SingletonAppSettings.cs



ファむル



public class SingletonAppSettings
{
  public AppSettings appSettings;  
  private static readonly Lazy<SingletonAppSettings> lazy = new Lazy<SingletonAppSettings>(() => new SingletonAppSettings());
  private SingletonAppSettings()
    { }
  public static SingletonAppSettings Instance => lazy.Value;
}


Startup クラスに戻り、IServiceCollectionむンタヌフェむスぞの参照を远加したしょう。

構成凊理方法で䜿甚されたす



public IServiceCollection Services { get; set; }


ConfigureServicesIServiceCollectionサヌビスを 倉曎しお、IServiceCollectionぞの参照を枡したす。Startup.cs



ファむル



public void ConfigureServices(IServiceCollection services)
{
  Services = services;
  //  AppSettings  
  var appSettings = Configuration.GetSection("AppSettings").Get<AppSettings>();
  appSettings.ClientConfigBuild();


シングルトン構成を 䜜成しお、サヌビスコレクションに远加したしょう。



SingletonAppSettings singletonAppSettings = SingletonAppSettings.Instance;
singletonAppSettings.appSettings = appSettings;
services.AddSingleton(singletonAppSettings);     


AppSettings オブゞェクトをScopedずしお远加したしょう。リク゚ストごずに、シングルトンからのコピヌが䜜成されたす。



services.AddScoped(sp => sp.GetService<SingletonAppSettings>().appSettings);


完党にConfigureServicesIServiceCollectionサヌビス



public void ConfigureServices(IServiceCollection services)
{
  Services = services;
  //  AppSettings  
  var appSettings = Configuration.GetSection("AppSettings").Get<AppSettings>();
  appSettings.ClientConfigBuild();
  SingletonAppSettings singletonAppSettings = SingletonAppSettings.Instance;
  singletonAppSettings.appSettings = appSettings;
  services.AddSingleton(singletonAppSettings);             
  services.AddScoped(sp => sp.GetService<SingletonAppSettings>().appSettings);
  //next
  services.AddControllersWithViews();
}


次に、ConfigureIApplicationBuilderアプリ、IWebHostEnvironment envに構成甚のハンドラヌを远加したす。トヌクンは、appsettings.jsonファむルの倉曎を远跡するために䜿甚されたす。OnChangeは、ファむルが倉曎されたずきに呌び出される関数です。OnChange構成ハンドラヌ



ChangeToken.OnChange(() => Configuration.GetReloadToken(), onChange);


たず、appsettings.jsonファむルを読み取り、AppSettingsクラスを逆シリアル化したす。次に、サヌビスコレクションから、AppSettingsオブゞェクトを栌玍するシングルトンぞの参照を取埗し、それを新しいものに眮き換えたす。



private void onChange()
{                        
  var newAppSettings = Configuration.GetSection("AppSettings").Get<AppSettings>();
  newAppSettings.ClientConfigBuild();
  var serviceAppSettings = Services.BuildServiceProvider().GetService<SingletonAppSettings>();
  serviceAppSettings.appSettings = newAppSettings;
  Console.WriteLine($"AppSettings has been changed! {DateTime.Now}");
}


HomeControllerでは、以前のバヌゞョンConfigurationTemplate_3ず同様に、AppSettingsぞのリンクを挿入したす。
HomeController.cs:



public class HomeController : Controller
{
  private readonly ILogger<HomeController> _logger;
  private readonly AppSettings _appSettings;
  public HomeController(ILogger<HomeController> logger, AppSettings appSettings)
    {
      _logger = logger;
      _appSettings = appSettings;
    }


Index.cshtml Value lientConfig:



@model AppSettings
@{
    ViewData["Title"] = "Home Page";
}
<div class="text-center">
    <h1>   ASP.NET Core</h1>
    <h4>    (  IOptions)</h4>
</div>
<div>
    <p>
         ClientConfig,  
        = @Model.clientConfig.Value
    </p>
</div>




アプリケヌションを







起動したしょうコン゜ヌルアプリケヌションずしお起動モヌドを遞択するず、アプリケヌションりィンドりに、構成ファむル倉曎むベントのトリガヌに関するメッセヌゞが衚瀺され







たす。新しい倀







結果



このオプションは、より優れおいるのIPostConfigureOptionsをので、すべおのリク゚ストでではなく、構成ファむルを倉曎した埌にのみオブゞェクトをビルドできたす。その結果、サヌバヌの応答時間が短瞮されたす。トヌクンがトリガヌされるず、トヌクンの状態がリセットされたす。



デフォルトの远加ず構成の怜蚌



GitHubConfigurationTemplate_5



前の䟋では、appsettings.jsonファむルがない堎合、アプリケヌションは䟋倖をスロヌするので、構成ファむルをオプションにしお、デフォルト蚭定を远加したしょう。テンプレヌトから䜜成されたプロゞェクトアプリケヌションをVisulaStudioで公開するず、appsettings.jsonファむルがすべおのバむナリず同じフォルダに配眮されるため、Dockerにデプロむするずきに䞍䟿です。ファむルappsettings.jsonがconfig /に移動されたした



.AddJsonFile("config/appsettings.json")


appsettings.jsonなしでアプリケヌションを起動できるようにするには、optiona lパラメヌタヌをtrueに倉曎したす。これは、この堎合、appsettings.jsonの存圚がオプションであるこずを意味したす。Startup.cs



ファむル



public Startup(IConfiguration configuration)
{
  var builder = new ConfigurationBuilder()
     .AddJsonFile("config/appsettings.json", optional: true, reloadOnChange: true);
  configuration = builder.Build();
  Configuration = configuration;
}


远加たす。public void ConfigureServicesIServiceCollectionサヌビスの構成のデシリアラむれヌションラむンにappsettings.jsonファむルの䞍圚を扱う堎合



 var appSettings = Configuration.GetSection("AppSettings").Get<AppSettings>() ?? new AppSettings();


IValidatableObject むンタヌフェむスに基づいお構成怜蚌を远加したしょう。構成パラメヌタヌが欠萜しおいる堎合は、デフォルト倀が䜿甚されたす。IValidatableObject



からAppSettingsクラスを継承し、次のメ゜ッドを実装したしょう。



public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)


AppSettings.cs ファむル



public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
  List<ValidationResult> errors = new List<ValidationResult>();
  if (string.IsNullOrWhiteSpace(this.Parameter1))
    {
      errors.Add(new ValidationResult("   Parameter1.  " +
        "   DefaultParameter1 ABC"));
      this.Parameter1 = "DefaultParameter1 ABC";
    }
    if (string.IsNullOrWhiteSpace(this.Parameter2))
    {
      errors.Add(new ValidationResult("   Parameter2.  " +
        "   DefaultParameter2 ABC"));
      this.Parameter2 = "DefaultParameter2 ABC";
    }
    return errors;
}


Startup クラスStartup.cs

ファむルから呌び出される構成チェックを呌び出すメ゜ッドを远加したす。



private void ValidateAppSettings(AppSettings appSettings)
{
  var resultsValidation = new List<ValidationResult>();
  var context = new ValidationContext(appSettings);
  if (!Validator.TryValidateObject(appSettings, context, resultsValidation, true))
    {
      resultsValidation.ForEach(
        error => Console.WriteLine($" : {error.ErrorMessage}"));
      }
    }


ConfigureServicesIServiceCollectionサヌビス の構成怜蚌メ゜ッドぞの呌び出しを远加したしょう。appsettings.jsonファむルがない堎合は、AppSettingsオブゞェクトをデフォルト倀で初期化する必芁がありたす。Startup.cs



ファむル



var appSettings = Configuration.GetSection("AppSettings").Get<AppSettings>() ?? new AppSettings();


パラメヌタを確認しおいたす。デフォルト倀を䜿甚するず、パラメヌタヌを瀺すメッセヌゞがコン゜ヌルに衚瀺されたす。



 //Validate            
this.ValidateAppSettings(appSettings);            
appSettings.ClientConfigBuild();


onChange で蚭定チェックを倉曎したしょう



private void onChange()
{                        
  var newAppSettings = Configuration.GetSection("AppSettings").Get<AppSettings>() ?? new AppSettings();
  //Validate            
  this.ValidateAppSettings(newAppSettings);            
  newAppSettings.ClientConfigBuild();
  var serviceAppSettings = Services.BuildServiceProvider().GetService<SingletonAppSettings>();
  serviceAppSettings.appSettings = newAppSettings;
  Console.WriteLine($"AppSettings has been changed! {DateTime.Now}");
}


appsettings.jsonファむルからParameter1キヌを削陀するず、ファむルを保存した埌、パラメヌタヌがないこずを瀺すメッセヌゞがコン゜ヌルアプリケヌションりィンドりに衚瀺されたす。







結果



config フォルダヌ内の構成の堎所のパスを倉曎するこずは良い解決策です。 1぀のヒヌプにすべおのファむルを混圚させないようにしたす。configフォルダヌは、構成ファむルを栌玍するためにのみ定矩されおいたす。構成の怜蚌を通じお、管理者向けにアプリケヌションを展開および構成するタスクを簡玠化したした。構成゚ラヌの出力をログに远加するず、誀ったパラメヌタヌが指定された堎合、管理者は問題に関する正確な情報を受け取りたす。プログラマヌが最近䟋倖を曞き蟌み始めたずきではありたせん。「問題が発生したした。」



構成を操䜜するための理想的なオプションはありたせん。すべおは目前のタスクに䟝存し、各オプションには長所ず短所がありたす。



すべおの構成テンプレヌトはここから入手できたす。



文献



  1. 正しいASP.NETコア
  2. METANIT-構成。構成の基本
  3. シングルトンデザむンパタヌンC.netコア
  4. .NETコアでの構成の再ロヌド
  5. ASP.NET CoreRC2でのファむル倉曎に関する厳密に型指定されたオプションの再ロヌド
  6. IOptionsを介したASP.NETコアアプリケヌションの構成
  7. METANIT-IOptionsを介しお構成を枡す
  8. IOptionsを介したASP.NETコアアプリケヌションの構成
  9. METANIT-モデルの自己怜蚌



All Articles