2016-11-15 6 views
1

FooBarタイプをASP.NETの組み込みコンテナに登録しました。ASP.NETコアを使用して1つのメソッドでのみ依存関係を取得するには

私のアクションメソッドの1つにインスタンスが必要です。私がコントローラーのすべてのアクションでそれを必要としたら、それをコンストラクターに注入します。しかし、私はそれが一つの方法でのみアクションメソッドで必要です。

ので、アクションメソッドでは、私が(未テスト)私はこれを行うことが前提としています

var service = HttpContext.RequestServices.GetService(typeof(FooService)) as FooService; 

しかしthe docs say悪い考えです。同意する。

私のオプションは何ですか?

+0

その後、この方法は、専用のコントローラに移動するための良い候補です。そしてコンストラクタを介して依存関係を渡します。 – Fabio

+0

@Fabio私の場合ではありません。 – grokky

+0

次に、現在のコントローラーのコンストラクターを介して依存関係を渡すのが間違っている場合 – Fabio

答えて

5

あなたは行動に依存性を注入するFromServices属性を使用することができます。

public IActionResult SampleAction([FromServices]FooService fooService) 
{ 
    // ... 
} 

ときには あなたのコントローラ内の複数のアクションのためのサービスを必要としません。この場合、アクションメソッドにパラメータとして サービスを注入することは意味があります。これは、ここに示すように、[FromServices]属性を持つ パラメータをマークすることによって行われます。

は、公式ドキュメントを参照してください:https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/dependency-injection#action-injection-with-fromservices

+0

彼らはドキュメントサイトをアップグレードしたので、私はそれを逃した!ありがとう!これはまさに私が必要としていたものです。 – grokky

関連する問題