5

Simple Injector を IoC コンテナーとして使用する ServiceStack API アプリケーションがあります。「Web リクエストごと」のライフスタイルを実現するには、特定のコンポーネントが必要です。

ここでSimple Injector のドキュメントを調べたところ、「Web リクエストごと」に対応するライフスタイルが 1 つではなく 2 つあることがわかりました。

  1. Web リクエストごと
  2. Web API リクエストごと

すべての ASP.NET アプリケーションが同じ基本的なパイプラインを使用し、HTTP モジュールをプラグインすることによって Web 要求ごとに IoC コンテナーが実装されていると常に思っていたので、これは私を混乱させました。Web API アプリケーションでこれが異なるのはなぜですか?

どれが ServiceStack API アプリケーションに最も適しているかについて、誰かが光を当てることができますか?

4

1 に答える 1

5

Web ごとのリクエストは、実際には「HttpContext ごとのリクエスト」であり、内部ではHttpContext.Current.Items辞書を使用してインスタンスをキャッシュします。ただし、このモデルは、Web API を使用しているときにすぐに崩壊し始めます。これは、Web API の非同期モデルと、Web API アプリケーションがセルフホスト環境で実行できるという事実によって引き起こされます (つまり: いいえ、まったくありませんHttpContext.Current) 。 )。

そのため、Simple Injector は Web API アプリケーションに特定のライフスタイルを提供します。この Per Web API Request ライフスタイルは、バックグラウンドで新しい実行コンテキスト スコープを使用し、非同期メソッドでスコープをフローできるようにします。

どれが ServiceStack API アプリケーションに最も適しているかについて、誰かが光を当てることができますか?

ServiceStack が本質的に非同期であるか、自己ホスト型である場合は、WebApiRequestLifestyleまたはを使用する方が適切ですExecutionContextScopeLifestyle。ServiceStack 内で実行するときに常に HttpRequest.Current がある場合は、WebRequestLifestyle.

于 2014-03-05T11:28:41.740 に答える