Могу ли я использовать Autofac DI в сообщении WebAPI messageHandler?

Я успешно подключил Autofac в своем проекте ASP.NET WebAPI, и теперь мне интересно, как разрешить услуги в моих MessageHandlers.

Поскольку MessageHandlers необходимо добавить при запуске приложения, ясно, что я не смогу их разрешить в области времени ожидания запроса. Здесь нет проблем.

Однако я хотел бы найти способ получить текущую область ожидания запроса во время выполнения метода SendAsync для MessageHandler, чтобы иметь возможность (например) выполнять проверку маркера, регистрироваться в репозитории и т.д....

Как мне это сделать?

Ответ 1

Вы можете использовать метод расширения 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);
    }
}