У меня есть проект, который использует Microsoft Unity и Web API 2. Он отлично работает, и с ним нет проблем. Однако, когда я пытаюсь использовать асинхр/ждутAsync/Await with Microsoft Unity
public async Task<IHttpActionResult> Post(PackageOrderDto dto)
{
try
{
newOrderNumber = await _apiPlaceOrder.Save(dto));
}
catch (ApiValidationFailedException apiValidationFailedException)
{
return BadRequest(apiValidationFailedException);
}
return Ok("VF" + newOrderNumber);
}
Я получаю ResolutionFailedException с этим сообщением:
Исключение составляет:
InvalidOperationException - The PerRequestLifetimeManager можно использовать только в контексте HTTP-запрос. Возможные причины этой ошибки используют диспетчер времени жизни в приложении nonASP.NET или используют в потоке, который не связан с соответствующим контекстом синхронизации .
Управление ApiPlaceOrder
осуществляется с использованием UnityHierarchicalDependencyResolver.
Код работает нормально, когда не используется асинхронный/ждущий.
Любые идеи о том, как заставить Unity поиграть с асинхронным/ждущим?
Я раздели код _apiPlaceOrder.Save(...)
право вернуться к этому, чтобы попытаться изолировать проблему, и я все еще получаю один и тот же вопрос:
public class ApiPlaceOrder
{
public async Task<int> Save(PackageOrderDto dto)
{
await Task.Delay(10000);
return 1;
}
}
Как реализуется '_apiPlaceOrder.Save'? И где же генерируется исключение? Выполните также трассировку стека –
Попробуйте использовать пакет Nuget Unitiy.WebAPI и HierarchicalLifetimeManager и UnityHierarchicalDependencyResolver вместо текущей настройки. Если это сработает, я могу дать вам объяснение. – JotaBe
@JotaBe Я уже делаю обе эти вещи. Они необходимы для работы с WebAPI. – garryp