ASP.NET Coreオプション

3009 ワード

目次
  • 1、オプションインタフェース
  • 2、注入構成とIOptions
  • 3,IOptionsSnapshot

  • まずASPについて理解する.NET Coreの構成は、ここをクリックしてください.https://www.cnblogs.com/whuanle/p/13061059.html

    1、オプションインタフェース


    ASP.NET Coreのオプションインタフェースは、次の3つです.
  • IOptions
  • IOptionsSnapshot
  • IOptionsMonitor

  • この3つの方法は、ライフサイクルやファイルモニタリングなどの違いで構成を得ることができます.

    2,注入構成とIOptions


    まずASPを作成します.NET Core APIプロジェクト、testを追加します.jsonファイル、内容は以下の通りです.
    {
      "Title": "  ",
      "Name": "    "
    }
    

    対応するモデルクラスをもう1つ作成します.
        public class TestModel
        {
            public string Title { get; set; }
            public string Name { get; set; }
        }
    

    次に、StartupのConfigureServicesメソッドに次のものを追加します.
                services.Configure(new ConfigurationBuilder().AddJsonFile("test.json").Build());
    

    これで構成サービスを自動的に注入できます.では、この構成をどのように受信しますか?まずIOptionsを使用して受信することができます.
    コントローラを追加します.名前は次のとおりです.
        public class TestController : ControllerBase
        {
            private readonly TestModel _options;
            public TestController(IOptions options)
            {
                _options = options.Value;
            }
        }
    

    これでアクセスの構成を受信できます.これがIOptionsの使用です.IOptionsには、サポートされていないという特徴があります.
  • アプリケーション起動後に構成データを読み出す.
  • ネーミングオプション:
  • は、単一のインスタンスとして登録され、任意のサービス生存期間に注入することができる.

  • すなわち、アプリケーションが起動する前にプロファイル生成オブジェクト(単一のインスタンス)が読み込まれている.もちろん、後でプロファイル(.json)を変更しても、このオブジェクトには影響しません.

    3,IOptionsSnapshot


    ドキュメントの説明:IOptionsSnapshotを使用すると、生存期間アクセスおよびキャッシュ・オプションを要求するたびに、各リクエストに対して1回のオプションが計算されます.
    OptionsSnapshotのライフ・ドメインはscopedであり、1つのリクエストサイクルで有効です.
    その他は変更されません.使用時:
            private readonly TestModel _options;
            public TestController(IOptionsSnapshot options)
            {
                _options = options.Value;
            }
    

    OptionsSnapshotはリクエストごとに更新されるため、プロファイルが変更されると、更新をタイムリーに取得できます.OptionsMonitorでは若干異なります.
        public class TestController : ControllerBase
        {
            private readonly IOptionsMonitor _options;
            public TestController(IOptionsMonitor options)
            {
                _options = options;
            }
            [HttpGet("T")]
            public ContentResult T()
            {
    
                return new ContentResult()
                {
                    Content = _options.CurrentValue.Title
                };
            }
        }
    

    IOptionsSnapshotとIOptionsMonitorは、プロファイルの変更を検出できますが、IOptionsSnapshotはリクエストのたびに新しいオブジェクトであり、IOptionsMonitorは単一のモードです.