2016-11-30 3 views
12

既知のように、ASP.NET CoreのConfigure(クラススタートアップ)メソッドのIApplicationBuilderには、特定のセマンティクス(HttpContext型の入力パラメータと戻り値としてのTaskを持つInvokeメソッド)が必要です。しかし、なぜそれがインターフェイスとして実装されていないのですか?ASP.NET Coreのミドルウェアには特定のセマンティクスが必要ですが、インターフェイスは必要ないのはなぜですか?

public class FakeMiddleware 
{ 

} 

をし、それを登録します:私はそれのような何かを書くことができ

app.UseMiddleware<FakeMiddleware>(); 

と、私たちは、ランタイムエラーが発生します。もちろん、それは簡単なことであり、簡単に見つけて修正することができますが、インターフェイスがなくても大雑把に実装されていますか?

答えて

16

Invokeメソッドは柔軟で、追加のパラメータを要求できます。 ASP.NETは、アプリケーションのサービス構成を使用して追加のパラメータを注入します。

public async Task Invoke(HttpContext ctx, 
         IHostingEnvironment host, 
         ISomethingElse service) 
{ 
    // ... 
} 

C#インターフェイス定義では、この柔軟性をうまく利用できません。

+0

DIでは、現在の「バージョン」の不利な点について考えることができますか? :)この状況(追加のパラメータとそれを自動的に解決するため)は、この場所よりも分散することができるので –

+0

ああ、それはコンストラクタを注入する必要があります。要求ごとの依存関係であれば、ファクトリパターンはうまく動作します – Rbjz

関連する問題