Как перехватить исключение Autofac.Core.DependencyResolutionException, чтобы зарегистрировать его?C#

Место общения программистов C#
Ответить
Anonymous
 Как перехватить исключение Autofac.Core.DependencyResolutionException, чтобы зарегистрировать его?

Сообщение Anonymous »


У меня есть проект WebApi2 asp.net framework 4.8 с Autofac для DI, и когда я отправляю запрос на действия на данном контроллере, я получаю ошибку 500, и содержимое показывает, что это связано с отсутствующей зависимостью. Совершенно верно, я забыл настроить одну из своих зависимостей.

"ExceptionType": "System.InvalidOperationException", "StackTrace": "в System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(запрос HttpRequestMessage, HttpControllerDescriptor ControllerDescriptor, Type ControllerType)\r\n в System.Web.Http.Dispatcher.HttpControllerDispatcher.d__15.MoveNext() ", ... Внутреннее исключение... "ExceptionType": "Autofac.Core.DependencyResolutionException", "StackTrace": "в Autofac.Core.Activators.Reflection.ReflectionActivator.c__DisplayClass14_0.b__0(контекст ResolveRequestContext, Action`1 следующее)\r\n в Autofac.Core.Resolver.Pipeline.ResolvePipelineBuilder. c__DisplayClass14_0.b__1(контекст ResolveRequestContext)\r\n в Autofac.Core.Resolve.Middleware.DisposalTrackingMiddleware.Execute(контекст ResolveRequestContext, Action`1 следующее)\r\n в Autofac.Core.Resolve.Pipeline.ResolvePipelineBuilder. c__DisplayClass14_0.b__1(контекст ResolveRequestContext)\r\n в Autofac.Core.Resolve.Middleware.ActivatorErrorHandlingMiddleware.Execute(контекст ResolveRequestContext, действие `1 следующее)" Некоторое время я вызывал API из другого приложения, и запрос просто исчезал, и в моих журналах ничего не появлялось ни для одного приложения, что было бы очень полезно для более быстрого решения проблемы.

В проекте WebApi у меня есть класс фильтра исключений UnhandledExceptionFilter: ExceptionFilterAttribute для регистрации любых необработанных исключений. У меня он зарегистрирован глобально, например

Конфигурация HttpConfiguration = GlobalConfiguration.Configuration; config.Filters.Add(новый UnhandledExceptionFilter()); И я был убежден, что, учитывая, что DI контроллера происходит во время конвейера запросов, это исключение попадет в этот фильтр и зарегистрируется, однако этого не происходит. Я протестировал создание исключения из действия на другом контроллере, и UnhandledExceptionFilter сработал должным образом и зарегистрировал это исключение, поэтому я уверен, что это работает.

Итак, я предполагаю, что либо разрешение зависимостей происходит вне этого контекста и, следовательно, не передается фильтру, либо оно происходит внутри этого контекста, но что-то (возможно, autofac или webapi??) проглатывая его дальше по цепочке.

Кто-нибудь знает, что мне нужно, чтобы зарегистрировать это исключение?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»