当サイトを最適な状態で閲覧していただくにはブラウザのJavaScriptを有効にしてご利用下さい。
JavaScriptを無効のままご覧いただいた場合には一部機能がご利用頂けない場合や正しい情報を取得できない場合がございます。
同意しました
本サイトではWebサイトのエクスペリエンスを向上させるために、Cookieを使用しています。Cookieはブラウザの設定から無効にできます。詳細はこちらから

Blog

ブログ

Blog

ASP.NETCoreでのアプリケーション構成

By Sean G. Wright  

ASP.NET Coreは、開発者がWebアプリケーションに柔軟な構成を追加するための特定の方法を提供します。さまざまな構成例と、KenticoXperienceがプロジェクトにどのように役立つかをご覧ください。

ソフトウェア開発では、アプリケーション構成により、アプリケーション自体を変更することなく、アプリケーションの動作方法を変更できます。

構成ソースは、ファイル、アプリケーションメモリ、データベースなど、すべてのプラットフォームとフレームワークでほぼ同じですが、構成を定義してアクセスする方法は、プラットフォームとフレームワークに固有です。

したがって、 ASP.NET Coreが、開発者がWebアプリケーションに柔軟な構成を追加するための特定の方法を提供するのは当然のことです。

構成にファイルを使用する

appsettings.json

.NET Framework上のASP.NETと同様に、ASP.NET Coreは、アプリケーションのニーズの変化と拡大に応じて拡張できる構成のいくつかの規則から始まります。

従来のASP.NETアプリケーションは、構成の主要なソースとして、 「web.config」で始まるXMLで記述された「.config」ファイルを使用していました。この構成の一部は、ASP.NET Coreでコードに移行しましたが(XMLで登録されたHttpHandlerとHttpModuleの代わりにミドルウェアなど)、ほとんどの構成はファイルからのものであり、主な違いはファイルの構文です。

JSONファイル、特に`appsettings.json`は、XMLベースの` web.config`ファイルに取って代わりました。

IConfigurationの使用

この `appsettings.json`ファイルに追加されたキーと値のペアは、依存性注入を使用して` IConfiguration`サービスを使用してアプリケーションのどこからでもアクセスできます。

具体的な例を見てみましょう!

次のように、 ASP.NETCoreアプリケーションで `appsettings.json`ファイルを取得します。

 { '挨拶' :{ '朝''おはよう' '午後''おはよう' '夜''おやすみ' }、 'greetingTimes' :{ '朝''6:00' '午後 '' 12:00 ' '夜 '' 18:00 ' } }


`IConfiguration`サービスを使用して、コントローラーの構成値にアクセスできます。

 public class HomeController Controller { private readonly IConfiguration config ; public HomeController (IConfiguration config  {これconfig = config ; } public ActionResult Index 文字列名)  {文字列morningGreeting = config [ 'greetings:morning' ]; string personalizedGreeting = $ '{morningGreeting}、{name}' ; // ... } }


ネストされた構成値にアクセスできる`greetings:morning`構文に注目してください。

構成の「挨拶」セクション全体を取得することもできます。

 IConfigurationSection Greetings = config.GetSection( 'greetings'; string nightGreeting = Greetings [ 'night' ] ;


`IConfiguration`サービスには別のメソッド` .GetValue () `があり、これを使用して構成値を別のタイプに変換できます。

 IConfigurationSection Greetings = config.GetSection( 'greetings' ); IConfigurationSection times = config.GetSection( 'greetingTimes' ); TimeSpan朝= times.GetValue '朝' ); TimeSpan午後= times.GetValue  >( '午後' ); TimeSpan night = times.GetValue 'night' ); TimeSpan now = DateTime.Now.TimeOfDay; if (now <朝||今> =夜) {挨拶を返す['夜' ]; } else if(現在<午後) {挨拶を返す['朝' ]; } else if(now  { return Greetings [ 'afternoon' ]; }


これらの単純な構成例は一部のアプリケーションで機能しますが、ASP.NETCoreは複雑なアプリケーションもサポートしています。

構成プロバイダー

ASP.NETCoreに移行するASP.NET.NET Frameworkアプリケーションがある場合、 `.json`ファイル以外のソースから多くの構成が行われる可能性があります。

幸い、ASP.NET Coreは、他にもいくつかの構成プロバイダーを提供しています。

それはかなり網羅的なリストです!ただし、アプリケーションは、上記のプロバイダーでカバーされていないソースから構成を読み取る必要がある場合があります。これらのシナリオには、 カスタム構成プロバイダーがあります。

アプリケーションの構成は、構成プロバイダーを持たないクラウドオファリングに保存されている可能性があります。あるいは、おそらく、データベースに構成値を保存している可能性があります。

これらのシナリオのいずれについても、 `IDictionary `に構成値を入力する方法を知っている構成プロバイダーを作成できます。

この構成プロバイダーは、アプリケーションの起動時に、アプリケーション構成のソースとして追加されたカスタム構成ソース(これも当社が作成)によって使用されます。

オプションパターン

アプリケーションが内部機能と外部統合の両方で成長するにつれて、必然的にさらに多くの構成が必要になります。

  • データベース接続文字列
  • WebサービスAPIキー
  • 電子メールSMTP資格情報
  • ファイルシステムパス

ただし、アプリケーションの各部分は、必要な構成にのみアクセスできる必要があり、すべての構成ソースのすべての機能のすべての値にアクセスできるわけではありません。

ありがたいことに、ASP.NET Coreは、 オプションパターンで役立つ抽象化を提供します。

オプションを使用すると、開発者は、構成を保持する単純なC#クラスと、アプリケーションの`IConfiguration`からそれらのクラスにデータを入力するプロセスを定義できます。これは、Optionsパターンを採用すると、依存関係として `IConfiguration`を渡すことを回避し、構成が検証され、強く型付けされることを保証できることを意味します。

前の挨拶の例でオプションを使用する方法を見てみましょう。

まず、特定の構成値を保持するC#クラスを定義します(便宜上、C#9.0レコードタイプを使用しています)。

 記録GreetingConfiguration  GreetingSettings朝、 GreetingSettings午後、 GreetingSettings Night  {} パブリックレコードGreetingSettings 文字列Greeting、TimeSpan Time) {}


次に、アプリケーションの起動時に、 `GreetingConfiguration`をオプションとして定義し、その作成方法を説明します。

パブリッククラスのスタートアップ{ パブリックスタートアップ(IConfiguration構成)  {構成=構成; } public IConfiguration Configuration { get ; } public void ConfigureServices (IServiceCollectionサービス)  { services.AddOptions ()。 Configure(greetingConfig => { IConfigurationSection Greetings = config .GetSection( 'greetings' ); IConfigurationSection times = config .GetSection( 'greetingTimes' ); TimeSpan朝= times.GetValue '朝' ); TimeSpan午後= times.GetValue '午後' ); TimeSpan night = times.GetValue 'night' );新しいGreetingConfiguration( new GreetingSettings(greetings [ 'morning' ]、morning)、 new GreetingSettings(greetings [ 'afternoon' ]、午後)、 new GreetingSettings(greetings [ 'night' ]、night)、 );を返します。 }); // ... } }


これで、 `IOptions `インターフェイスを使用して、アプリケーションの必要な場所に特定の `GreetingConfiguration`を挿入できます。

パブリッククラスGreetingControllerコントローラー{プライベート読み取り専用GreetingConfigurationグリーティング; public GreetingControllerIOptions  Greetings { this .greetings = Greetings.Value; } public ActionResult Index { // C#9.0レコードの破棄! ((文字列morningGreeting、TimeSpanmorningTime)、_、_)=挨拶; // ... } }


その他の興味深いユースケースは、 IOptionsSnapshotで有効になります。これにより、リクエストごとにオプションが再作成され、最新の値が確実に得られます。これは、構成がデータベースまたはWebサービスからのものである場合に役立ちます。

IOptionsMonitorを使用することもできます。これにより、データソースが変更されるたびにオプションを再作成できます。

KenticoXperienceの構成

私たちが見た構成例のいくつかは( `IConfiguration`を使用して)単純ですが、他の例ははるかに複雑です(カスタムの` IConfigurationProvider`または`IOptionsMonitor` )。

では、データベースとファイルシステムの両方から構成を取得するデータ駆動型アプリケーションであるKentico Xperience 13.0を使用する場合、構成値を初期化してアクセスするにはどうすればよいでしょうか。

ありがたいことに、それはかなり簡単です!

まず、Kentico Xperienceをアプリケーションの起動時に登録して、アプリケーションに統合していることを確認します。

パブリッククラスのスタートアップ{ パブリックスタートアップ(IConfiguration構成)  {構成=構成; } public IConfiguration Configuration { get ; } public void ConfigureServices (IServiceCollectionサービス)  { services.AddKentico(); // ... } }


XperienceはASP.NETCoreの規則に従い、 `appsettings.json`で構成を検索するため、必要なのは構成キーを参照してカスタム値を指定することだけです。 Xperienceが実行を開始するために必要なすべての構成は、自動的に接続されます。

しかし、データベース構成はどうですか?

Xperienceは、単一の`services.AddKentico();`呼び出しを使用して、依存性注入を介してアプリケーションで自動的に使用できる`ISettingsService`インターフェースを使用して、これも簡単にします。

これが完了すると、 `ISettingsService`を直接使用できます(または、上記のオプションパターンを使用したオプションのデータソースとして)。

パブリッククラスHomeControllerコントローラー{ プライベート読み取り専用ISettingsService設定 public HomeControllerISettingsService settings { this .settings = settings; } public ActionResult Index {文字列の挨拶=設定[ 'SiteGreeting' ]; // ... } }


ご覧のとおり、Kentico Xperienceは、アプリケーションの構築を迅速に開始し、要件の増大に応じて複雑さを管理するために必要なビルディングブロックを提供します。

CMSの導入についてお悩みでしょうか?

使いやすいコンテンツ管理UIと強力なデジタルマーケティング支援機能をそなえた
Kentico Xperienceをぜひお試しください。