2017-04-07 15 views
1

ラムダOptionsは.NETコアでservices.Add*とどのように動作しますか?.netコアの設定オプション

私は通常、services.Configureで次の操作を行い

services.Configure<MyOptions>(
    Configuration.GetSection("my-option-section-in-appsettings.json")); 

またはラムダバリアント、それは次のように来るときしかし、私は迷ってしまいました

services.Configure<MyOptions>(options => 
{ 
    options.PropertyName = "some-thing" 
} 

services.AddMyService(options => options.UseMethod1(...)); 

私は上記のコードを使用していましたが、私の方法を見つけることができませんでした。私が得ることができる最速の例では、どのように.NETのコアservices.Add*とラムダOptions作業を行うhere

+0

構成サービスは情報を保持するためのものなので、これは可能ではないと思います。私は単純なサービスを実装することをお勧めします...それは同じリンクのサービスフォルダで行われたようです:https://github.com/aspnet/Identity/tree/dev/samples/IdentitySample.Mvc/Services – Kris

+0

私はドン私が提供したリンクには、この 'options.UseSqlServer(Configuration.GetConnectionString(" DefaultConnection "))' –

+0

が明示的に含まれていますが、なぜあなたはそれが不可能だと言いますか?設定でメソッドを呼び出すように要求しています。あなたのリンク。あなたの例では、UseSqlServerのラムダで、設定ではないメソッド呼び出しがあります... – Kris

答えて

0

のですか?

一般的なパターンは、Action<TOptions>デリゲートを満たす式を追加することです。 TOptionsは、オブジェクトを更新したり、値を設定したり、メソッドを呼び出す機会を消費者に提供するadd関数に対応するオブジェクトです。 Action<TOptions>は、サービスの有効期間の一部として実行されます。たとえば、.AddMvc拡張メソッドを使用してMVCを追加する場合、フレームワークはサービスを使用できるようにする前にアクションを呼び出します。したがって、この具体例では、基礎となるすべてのMVCサービスが登録され、オプションオブジェクトがインスタンス化され、あなたに与えられます。

+0

これは光を与える。私は 'ビルダー'コールグラフで迷子になっていると思う。あるビルダーが別のビルダーにコールを渡し、コールを別のビルダーに渡します。 –

+0

デザインの美しさのこの部分。 'Action 'デリゲートでキャプチャされたオプションオブジェクトを通じて消費者が変更を表現できるようにする機能。 –

関連する問題