1

ルート パラメータに基づいてサービスの依存関係を読み込むにはどうすればよいですか?

私の要件は異なりますが、簡単な例を使用してみます。ユーザーは配送業者 (UPS、Fedex など) を選択でき、その情報はリクエスト モデルまたはルートの一部として提供されます。ルートに基づいて、サービス クラスをロードする必要があります。

Autofac OWINでどのように行うことができますか? これに関するヘルプをいただければ幸いです

4

1 に答える 1

1

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 つは、ファクトリを として登録することです。これはInstancePerLifetimeScopeIOwinContextリクエストごとに異なるためです。

ただし、OWIN レイヤーで作業する必要がありますか? OWINは実際には単なるHTTPレイヤーであるため、ルートデータなどはないため、物事が難しくなり、少しハックになる可能性があります。

HttpRequestMessageASP.NET Web APIを使用する場合、RegisterHttpRequestMessage拡張メソッドを使用すると、現在のファクトリに基づくことができます。
その後、 からルート データにアクセスできますrequest.GetRequestContext().RouteData。名前空間GetRequestContextの拡張メソッドであることに注意してください。System.Net.Http

ASP.NET MVC を使用する場合はAutofacWebTypesModule、コンテナーに を登録でき、それ自体がコンテナーにかなりの数の型を登録します。
それらの 1 つはプロパティHttpRequestContextを持っているRouteDataため、これをファクトリに挿入してロジックを適用できます。

于 2016-12-13T06:00:22.610 に答える