13

ASP.NET WebAPIプロジェクトでAutofacを正常に配線しましたが、MessageHandlerでサービスを解決する方法を考えています。

メッセージハンドラーはアプリケーションの起動時に追加する必要があるため、リクエストの有効期間スコープでメッセージハンドラーを解決できないことは明らかです。ここでは問題ありません。

ただし、(たとえば)トークンの検証やリポジトリへのログインなどを実行できるようにするために、MessageHandlerのSendAsyncメソッドの実行中に現在のリクエストの有効期間スコープを取得する方法を見つけたいと思います...

どうすればいいですか?

4

1 に答える 1

21

GetDependencyScope()で拡張メソッドを使用できます。HttpRequestMessageこれにより、IDependencyScopeハンドラーで必要なサービスを解決できる場所が提供されます。

public class MyHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request, 
        CancellationToken cancellationToken)
    {
        IMyService myservice =
         (IMyService)request.GetDependencyScope().GetService(typeof(IMyService));
        // Do my stuff with myservice
        return base.SendAsync(request, cancellationToken);
    }
}
于 2012-09-27T18:49:21.710 に答える