ASP. NET Core 3.0 - Невозможно получить доступ к удаленному объекту. Название объекта: «IServiceProvider» - PullRequest
1 голос
/ 27 января 2020

У нас есть windows сервис, который размещает веб-API и выполняет некоторые вычисления в фоновом режиме. Время от времени мы получаем исключения:

2019-12-27 11:49:15.525 +01:00 [Error] [Serilog.Log.Write] Unhandled exception caught. Runtime is terminating : True
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'IServiceProvider'.
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ThrowHelper.ThrowObjectDisposedException()
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
   at MediatR.ServiceFactoryExtensions.GetInstances[T](ServiceFactory factory)
   at MediatR.Internal.RequestHandlerWrapperImpl`2.Handle(IRequest`1 request, CancellationToken cancellationToken, ServiceFactory serviceFactory)
   at MediatR.Mediator.Send[TResponse](IRequest`1 request, CancellationToken cancellationToken)
   at DataProcessor.Enricher.ChangeTracking.LegacyDataChangeTracker.SendForEnrichment(TurbineTimeCounters turbineTimeCounters, Unit unit)
   at DataProcessor.Enricher.ChangeTracking.LegacyDataChangeTracker.<ProcessEventsAndHistData>b__29_1(Unit unit)
   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__139_1(Object state)
   at System.Threading.QueueUserWorkItemCallbackDefaultContext.Execute()
   at System.Threading.ThreadPoolWorkQueue.Dispatch()

У нас нет никаких исключений из встроенного DI при запуске, поэтому зависимости настроены правильно.

Я провел расследование. Сервисная фабрика MediatR является делегатом метода Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService.

ServiceProviderEngineScope утилизируется в тот момент, когда MediatR вызывает его. https://github.com/aspnet/DependencyInjection/blob/master/src/DI/ServiceLookup/ServiceProviderEngineScope.cs

Есть какие-либо идеи, почему ServiceProviderEngineScope был утилизирован до того, как MediatR назвал его?

MediatR версия 7.0.0.

Asp. Net ядро ​​ 3.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...