2016-11-14 1 views
0

ルートパラメータに基づいてサービス依存関係をロードするにはどうすればよいですか?リクエストに基づいてOWIN web appi-loadの依存関係を設定する

私の要件は異なりますが、私は簡単な例を使用しようとします。 ユーザーは配送業者(UPS、Fedex ...)を選択することができ、情報は要求モデルまたは経路の一部です。ルートに基づいて、私はサービスクラスをロードする必要があります。

どのようにAutofac OWINで行うことができますか?

答えて

0

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というプロパティーを持っているので、これを工場に注入してロジックを適用することができます。

関連する問題