Browse Source

Avoid caching `IServiceProvider ` service.

pull/20130/head
maliming 2 years ago
parent
commit
72f3ff5105
  1. 16
      framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs
  2. 4
      framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpJsonSystemTextJsonModule.cs
  3. 16
      framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/Modifiers/AbpDateTimeConverterModifier.cs
  4. 4
      framework/src/Volo.Abp.TestBase/Volo/Abp/Testing/AbpAsyncIntegratedTest.cs
  5. 9
      framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpDateTimeConverter_Tests.cs

16
framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs

@ -50,14 +50,18 @@ public static class AbpRegistrationBuilderExtensions
ServiceDescriptor serviceDescriptor) ServiceDescriptor serviceDescriptor)
where TActivatorData : ReflectionActivatorData where TActivatorData : ReflectionActivatorData
{ {
registrationBuilder.OnActivated(context => var actions = activatedActionList.GetActions(serviceDescriptor);
if (actions.Any())
{ {
var serviceActivatedContext = new OnServiceActivatedContext(context.Instance!); registrationBuilder.OnActivated(context =>
foreach (var action in activatedActionList.GetActions(serviceDescriptor))
{ {
action.Invoke(serviceActivatedContext); var serviceActivatedContext = new OnServiceActivatedContext(context.Instance!);
} foreach (var action in actions)
}); {
action.Invoke(serviceActivatedContext);
}
});
}
return registrationBuilder; return registrationBuilder;
} }

4
framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpJsonSystemTextJsonModule.cs

@ -34,7 +34,9 @@ public class AbpJsonSystemTextJsonModule : AbpModule
context.Services.AddOptions<AbpSystemTextJsonSerializerModifiersOptions>() context.Services.AddOptions<AbpSystemTextJsonSerializerModifiersOptions>()
.Configure<IServiceProvider>((options, rootServiceProvider) => .Configure<IServiceProvider>((options, rootServiceProvider) =>
{ {
options.Modifiers.Add(new AbpDateTimeConverterModifier().CreateModifyAction(rootServiceProvider)); options.Modifiers.Add(new AbpDateTimeConverterModifier(
rootServiceProvider.GetRequiredService<AbpDateTimeConverter>(),
rootServiceProvider.GetRequiredService<AbpNullableDateTimeConverter>()).CreateModifyAction());
}); });
} }
} }

16
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 public class AbpDateTimeConverterModifier
{ {
private IServiceProvider _serviceProvider = default!; private readonly AbpDateTimeConverter _abpDateTimeConverter;
private readonly AbpNullableDateTimeConverter _abpNullableDateTimeConverter;
public Action<JsonTypeInfo> CreateModifyAction(IServiceProvider serviceProvider) public AbpDateTimeConverterModifier(AbpDateTimeConverter abpDateTimeConverter, AbpNullableDateTimeConverter abpNullableDateTimeConverter)
{
_abpDateTimeConverter = abpDateTimeConverter;
_abpNullableDateTimeConverter = abpNullableDateTimeConverter;
}
public Action<JsonTypeInfo> CreateModifyAction()
{ {
_serviceProvider = serviceProvider;
return Modify; return Modify;
} }
@ -31,8 +37,8 @@ public class AbpDateTimeConverterModifier
!property.AttributeProvider.GetCustomAttributes(typeof(DisableDateTimeNormalizationAttribute), false).Any()) !property.AttributeProvider.GetCustomAttributes(typeof(DisableDateTimeNormalizationAttribute), false).Any())
{ {
property.CustomConverter = property.PropertyType == typeof(DateTime) property.CustomConverter = property.PropertyType == typeof(DateTime)
? _serviceProvider.GetRequiredService<AbpDateTimeConverter>() ? _abpDateTimeConverter
: _serviceProvider.GetRequiredService<AbpNullableDateTimeConverter>(); : _abpNullableDateTimeConverter;
} }
} }
} }

4
framework/src/Volo.Abp.TestBase/Volo/Abp/Testing/AbpAsyncIntegratedTest.cs

@ -34,6 +34,10 @@ public class AbpAsyncIntegratedTest<TStartupModule> : AbpTestBaseWithServiceProv
public virtual async Task DisposeAsync() public virtual async Task DisposeAsync()
{ {
await Application.ShutdownAsync(); await Application.ShutdownAsync();
if (RootServiceProvider is IDisposable disposable)
{
disposable.Dispose();
}
TestServiceScope.Dispose(); TestServiceScope.Dispose();
Application.Dispose(); Application.Dispose();
} }

9
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;
using System.Text.Json.Serialization.Metadata; using System.Text.Json.Serialization.Metadata;
using Shouldly; using Shouldly;
using Volo.Abp.Json.SystemTextJson.JsonConverters;
using Volo.Abp.Json.SystemTextJson.Modifiers; using Volo.Abp.Json.SystemTextJson.Modifiers;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Xunit; using Xunit;
@ -21,7 +22,13 @@ public class AbpDatetimeToEnum_Tests : AbpJsonSystemTextJsonTestBase
{ {
TypeInfoResolver = new DefaultJsonTypeInfoResolver() TypeInfoResolver = new DefaultJsonTypeInfoResolver()
{ {
Modifiers = { new AbpDateTimeConverterModifier().CreateModifyAction(ServiceProvider) } Modifiers =
{
new AbpDateTimeConverterModifier(
GetRequiredService<AbpDateTimeConverter>(),
GetRequiredService<AbpNullableDateTimeConverter>())
.CreateModifyAction()
}
} }
}; };

Loading…
Cancel
Save