我可以在WebAPI messageHandler中使用Autofac DI吗?

时间:2012-09-26 20:43:12

标签: asp.net-web-api autofac

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

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

但是,我想找到一种在MessageHandler的SendAsync方法执行期间获取当前请求生存期范围的方法,以便能够(例如)执行令牌验证,登录存储库等...

我该怎么做?

1 个答案:

答案 0 :(得分:17)

您可以使用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);
    }
}