13

我在我的 ASP.NET WebAPI 项目中成功连接了 Autofac,现在我想知道如何在我的 MessageHandlers 中解析服务。

由于必须在应用程序启动时添加 MessageHandlers,很明显我无法在请求生命周期范围内解决它们。这里没问题。

但是,我想找到一种在执行 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 回答