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

Eil*_*aee 12 autofac asp.net-web-api

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

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

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

我该怎么办?

nem*_*esv 20

您可以使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)