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