Lazy resolve the exception subscribers.

pull/3488/head
Halil İbrahim Kalkan 6 years ago
parent c9e0ae2e42
commit 78735d37f6

@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using JetBrains.Annotations; using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -12,11 +12,11 @@ namespace Volo.Abp.ExceptionHandling
{ {
public ILogger<ExceptionNotifier> Logger { get; set; } public ILogger<ExceptionNotifier> Logger { get; set; }
protected IEnumerable<IExceptionSubscriber> ExceptionSubscribers { get; } protected IHybridServiceScopeFactory ServiceScopeFactory { get; }
public ExceptionNotifier(IEnumerable<IExceptionSubscriber> exceptionSubscribers) public ExceptionNotifier(IHybridServiceScopeFactory serviceScopeFactory)
{ {
ExceptionSubscribers = exceptionSubscribers; ServiceScopeFactory = serviceScopeFactory;
Logger = NullLogger<ExceptionNotifier>.Instance; Logger = NullLogger<ExceptionNotifier>.Instance;
} }
@ -24,16 +24,22 @@ namespace Volo.Abp.ExceptionHandling
{ {
Check.NotNull(context, nameof(context)); Check.NotNull(context, nameof(context));
foreach (var exceptionSubscriber in ExceptionSubscribers) using (var scope = ServiceScopeFactory.CreateScope())
{ {
try var exceptionSubscribers = scope.ServiceProvider
{ .GetServices<IExceptionSubscriber>();
await exceptionSubscriber.HandleAsync(context);
} foreach (var exceptionSubscriber in exceptionSubscribers)
catch (Exception e)
{ {
Logger.LogWarning($"Exception subscriber of type {exceptionSubscriber.GetType().AssemblyQualifiedName} has thrown an exception!"); try
Logger.LogException(e, LogLevel.Warning); {
await exceptionSubscriber.HandleAsync(context);
}
catch (Exception e)
{
Logger.LogWarning($"Exception subscriber of type {exceptionSubscriber.GetType().AssemblyQualifiedName} has thrown an exception!");
Logger.LogException(e, LogLevel.Warning);
}
} }
} }
} }

Loading…
Cancel
Save