ルート パラメータに基づいてサービスの依存関係を読み込むにはどうすればよいですか?
私の要件は異なりますが、簡単な例を使用してみます。ユーザーは配送業者 (UPS、Fedex など) を選択でき、その情報はリクエスト モデルまたはルートの一部として提供されます。ルートに基づいて、サービス クラスをロードする必要があります。
Autofac OWINでどのように行うことができますか? これに関するヘルプをいただければ幸いです
ルート パラメータに基づいてサービスの依存関係を読み込むにはどうすればよいですか?
私の要件は異なりますが、簡単な例を使用してみます。ユーザーは配送業者 (UPS、Fedex など) を選択でき、その情報はリクエスト モデルまたはルートの一部として提供されます。ルートに基づいて、サービス クラスをロードする必要があります。
Autofac OWINでどのように行うことができますか? これに関するヘルプをいただければ幸いです
Autofac の OWIN 統合を使用すると、ここで確認できるように、各要求によって新しい有効期間スコープが作成され、現在の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()
}
}
確認する必要があることの 1 つは、ファクトリを として登録することです。これはInstancePerLifetimeScope
、IOwinContext
リクエストごとに異なるためです。
ただし、OWIN レイヤーで作業する必要がありますか? OWINは実際には単なるHTTPレイヤーであるため、ルートデータなどはないため、物事が難しくなり、少しハックになる可能性があります。
HttpRequestMessage
ASP.NET Web APIを使用する場合、RegisterHttpRequestMessage
拡張メソッドを使用すると、現在のファクトリに基づくことができます。
その後、 からルート データにアクセスできますrequest.GetRequestContext().RouteData
。名前空間GetRequestContext
の拡張メソッドであることに注意してください。System.Net.Http
ASP.NET MVC を使用する場合はAutofacWebTypesModule
、コンテナーに を登録でき、それ自体がコンテナーにかなりの数の型を登録します。
それらの 1 つはプロパティHttpRequestContext
を持っているRouteData
ため、これをファクトリに挿入してロジックを適用できます。