ルートパラメータに基づいてサービス依存関係をロードするにはどうすればよいですか?リクエストに基づいてOWIN web appi-loadの依存関係を設定する
私の要件は異なりますが、私は簡単な例を使用しようとします。 ユーザーは配送業者(UPS、Fedex ...)を選択することができ、情報は要求モデルまたは経路の一部です。ルートに基づいて、私はサービスクラスをロードする必要があります。
どのようにAutofac OWINで行うことができますか?
ルートパラメータに基づいてサービス依存関係をロードするにはどうすればよいですか?リクエストに基づいてOWIN web appi-loadの依存関係を設定する
私の要件は異なりますが、私は簡単な例を使用しようとします。 ユーザーは配送業者(UPS、Fedex ...)を選択することができ、情報は要求モデルまたは経路の一部です。ルートに基づいて、私はサービスクラスをロードする必要があります。
どのようにAutofac OWINで行うことができますか?
AutofacのOWIN統合を使用すると、hereのように、各要求で現在のIOwinContext
が登録された新しい有効期間スコープが作成されます。
次に、IOwinContext
に依存するファクトリにサービスの作成を委任できます。あなたが確認する必要があります
public class MyServiceFactory
{
private readonly IOwinContext _context;
public MyServiceFactory(IOwinContext context)
{
_context = context;
}
public IService Create()
{
// inspect the context and determine which service you need
// you could return, dependending on, let's say, the URL
// - UpsService()
// - FedexService()
}
}
一つは、IOwinContext
が要求ごとに異なりますので、あなたがInstancePerLifetimeScope
としてあなたの工場を登録することです。
あなたはOWIN層で作業する必要がありますか? OWINは実際にはHTTPレイヤーなので、物事はもっと難しくなるかもしれないし、おそらくちょっとハッキリなので、ルートデータなどはありません。
ASP.NET Web APIを使用している場合は、RegisterHttpRequestMessage
拡張メソッドを使用すると、現在のHttpRequestMessage
に基づいて工場を設定できます。
request.GetRequestContext().RouteData
から経路データにアクセスできます。なお、GetRequestContext
は、System.Net.Http
名前空間の拡張メソッドです。
ASP.NET MVCを使用している場合は、コンテナにかなりの数のタイプを登録しているコンテナにAutofacWebTypesModule
を登録できます。
HttpRequestContext
のいずれかがRouteData
というプロパティーを持っているので、これを工場に注入してロジックを適用することができます。