From 72f3ff51057630d5b3ba32f6d0d929bc1d6c5dbd Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Sat, 29 Jun 2024 14:27:33 +0800 Subject: [PATCH] Avoid caching `IServiceProvider ` service. --- .../Builder/AbpRegistrationBuilderExtensions.cs | 16 ++++++++++------ .../AbpJsonSystemTextJsonModule.cs | 4 +++- .../Modifiers/AbpDateTimeConverterModifier.cs | 16 +++++++++++----- .../Volo/Abp/Testing/AbpAsyncIntegratedTest.cs | 4 ++++ .../Volo/Abp/Json/AbpDateTimeConverter_Tests.cs | 9 ++++++++- 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs b/framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs index 53216b03b9..2ab98adbb4 100644 --- a/framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs +++ b/framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs @@ -50,14 +50,18 @@ public static class AbpRegistrationBuilderExtensions ServiceDescriptor serviceDescriptor) where TActivatorData : ReflectionActivatorData { - registrationBuilder.OnActivated(context => + var actions = activatedActionList.GetActions(serviceDescriptor); + if (actions.Any()) { - var serviceActivatedContext = new OnServiceActivatedContext(context.Instance!); - foreach (var action in activatedActionList.GetActions(serviceDescriptor)) + registrationBuilder.OnActivated(context => { - action.Invoke(serviceActivatedContext); - } - }); + var serviceActivatedContext = new OnServiceActivatedContext(context.Instance!); + foreach (var action in actions) + { + action.Invoke(serviceActivatedContext); + } + }); + } return registrationBuilder; } diff --git a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpJsonSystemTextJsonModule.cs b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpJsonSystemTextJsonModule.cs index 3afa1b8bde..498dedd8cd 100644 --- a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpJsonSystemTextJsonModule.cs +++ b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpJsonSystemTextJsonModule.cs @@ -34,7 +34,9 @@ public class AbpJsonSystemTextJsonModule : AbpModule context.Services.AddOptions() .Configure((options, rootServiceProvider) => { - options.Modifiers.Add(new AbpDateTimeConverterModifier().CreateModifyAction(rootServiceProvider)); + options.Modifiers.Add(new AbpDateTimeConverterModifier( + rootServiceProvider.GetRequiredService(), + rootServiceProvider.GetRequiredService()).CreateModifyAction()); }); } } diff --git a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/Modifiers/AbpDateTimeConverterModifier.cs b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/Modifiers/AbpDateTimeConverterModifier.cs index ba19ccfa29..d940a80ea0 100644 --- a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/Modifiers/AbpDateTimeConverterModifier.cs +++ b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/Modifiers/AbpDateTimeConverterModifier.cs @@ -10,11 +10,17 @@ namespace Volo.Abp.Json.SystemTextJson.Modifiers; public class AbpDateTimeConverterModifier { - private IServiceProvider _serviceProvider = default!; + private readonly AbpDateTimeConverter _abpDateTimeConverter; + private readonly AbpNullableDateTimeConverter _abpNullableDateTimeConverter; - public Action CreateModifyAction(IServiceProvider serviceProvider) + public AbpDateTimeConverterModifier(AbpDateTimeConverter abpDateTimeConverter, AbpNullableDateTimeConverter abpNullableDateTimeConverter) + { + _abpDateTimeConverter = abpDateTimeConverter; + _abpNullableDateTimeConverter = abpNullableDateTimeConverter; + } + + public Action CreateModifyAction() { - _serviceProvider = serviceProvider; return Modify; } @@ -31,8 +37,8 @@ public class AbpDateTimeConverterModifier !property.AttributeProvider.GetCustomAttributes(typeof(DisableDateTimeNormalizationAttribute), false).Any()) { property.CustomConverter = property.PropertyType == typeof(DateTime) - ? _serviceProvider.GetRequiredService() - : _serviceProvider.GetRequiredService(); + ? _abpDateTimeConverter + : _abpNullableDateTimeConverter; } } } diff --git a/framework/src/Volo.Abp.TestBase/Volo/Abp/Testing/AbpAsyncIntegratedTest.cs b/framework/src/Volo.Abp.TestBase/Volo/Abp/Testing/AbpAsyncIntegratedTest.cs index 4004c110a4..568aee5675 100644 --- a/framework/src/Volo.Abp.TestBase/Volo/Abp/Testing/AbpAsyncIntegratedTest.cs +++ b/framework/src/Volo.Abp.TestBase/Volo/Abp/Testing/AbpAsyncIntegratedTest.cs @@ -34,6 +34,10 @@ public class AbpAsyncIntegratedTest : AbpTestBaseWithServiceProv public virtual async Task DisposeAsync() { await Application.ShutdownAsync(); + if (RootServiceProvider is IDisposable disposable) + { + disposable.Dispose(); + } TestServiceScope.Dispose(); Application.Dispose(); } diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpDateTimeConverter_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpDateTimeConverter_Tests.cs index 7b1a0d81ce..f3001d89a0 100644 --- a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpDateTimeConverter_Tests.cs +++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpDateTimeConverter_Tests.cs @@ -3,6 +3,7 @@ using System.Globalization; using System.Text.Json; using System.Text.Json.Serialization.Metadata; using Shouldly; +using Volo.Abp.Json.SystemTextJson.JsonConverters; using Volo.Abp.Json.SystemTextJson.Modifiers; using Volo.Abp.Localization; using Xunit; @@ -21,7 +22,13 @@ public class AbpDatetimeToEnum_Tests : AbpJsonSystemTextJsonTestBase { TypeInfoResolver = new DefaultJsonTypeInfoResolver() { - Modifiers = { new AbpDateTimeConverterModifier().CreateModifyAction(ServiceProvider) } + Modifiers = + { + new AbpDateTimeConverterModifier( + GetRequiredService(), + GetRequiredService()) + .CreateModifyAction() + } } };