Browse Source

Refactor dynamic initializers to use service provider

Resolve #24570
pull/24571/head
maliming 4 weeks ago
parent
commit
e0ebc1b100
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 52
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureDynamicInitializer.cs
  2. 52
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionDynamicInitializer.cs
  3. 52
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingDynamicInitializer.cs

52
modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureDynamicInitializer.cs

@ -1,7 +1,6 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
@ -19,33 +18,19 @@ public class FeatureDynamicInitializer : ITransientDependency
public ILogger<FeatureDynamicInitializer> Logger { get; set; }
protected IServiceProvider ServiceProvider { get; }
protected IOptions<FeatureManagementOptions> Options { get; }
[CanBeNull]
protected IHostApplicationLifetime ApplicationLifetime { get; }
protected ICancellationTokenProvider CancellationTokenProvider { get; }
protected IDynamicFeatureDefinitionStore DynamicFeatureDefinitionStore { get; }
protected IStaticFeatureSaver StaticFeatureSaver { get; }
public FeatureDynamicInitializer(
IServiceProvider serviceProvider,
IOptions<FeatureManagementOptions> options,
ICancellationTokenProvider cancellationTokenProvider,
IDynamicFeatureDefinitionStore dynamicFeatureDefinitionStore,
IStaticFeatureSaver staticFeatureSaver)
public FeatureDynamicInitializer(IServiceProvider serviceProvider)
{
Logger = NullLogger<FeatureDynamicInitializer>.Instance;
ServiceProvider = serviceProvider;
Options = options;
ApplicationLifetime = ServiceProvider.GetService<IHostApplicationLifetime>();
CancellationTokenProvider = cancellationTokenProvider;
DynamicFeatureDefinitionStore = dynamicFeatureDefinitionStore;
StaticFeatureSaver = staticFeatureSaver;
}
public virtual Task InitializeAsync(bool runInBackground, CancellationToken cancellationToken = default)
{
var options = Options.Value;
var options = ServiceProvider
.GetRequiredService<IOptions<FeatureManagementOptions>>()
.Value;
if (!options.SaveStaticFeaturesToDatabase && !options.IsDynamicFeatureStoreEnabled)
{
@ -54,11 +39,12 @@ public class FeatureDynamicInitializer : ITransientDependency
if (runInBackground)
{
var applicationLifetime = ServiceProvider.GetService<IHostApplicationLifetime>();
Task.Run(async () =>
{
if (cancellationToken == default && ApplicationLifetime?.ApplicationStopping != null)
if (cancellationToken == default && applicationLifetime?.ApplicationStopping != null)
{
cancellationToken = ApplicationLifetime.ApplicationStopping;
cancellationToken = applicationLifetime.ApplicationStopping;
}
await ExecuteInitializationAsync(options, cancellationToken);
}, cancellationToken);
@ -68,20 +54,23 @@ public class FeatureDynamicInitializer : ITransientDependency
return ExecuteInitializationAsync(options, cancellationToken);
}
protected virtual async Task ExecuteInitializationAsync(FeatureManagementOptions options, CancellationToken cancellationToken)
protected virtual async Task ExecuteInitializationAsync(
FeatureManagementOptions options,
CancellationToken cancellationToken)
{
try
{
using (CancellationTokenProvider.Use(cancellationToken))
var cancellationTokenProvider = ServiceProvider.GetRequiredService<ICancellationTokenProvider>();
using (cancellationTokenProvider.Use(cancellationToken))
{
if (CancellationTokenProvider.Token.IsCancellationRequested)
if (cancellationTokenProvider.Token.IsCancellationRequested)
{
return;
}
await SaveStaticFeaturesToDatabaseAsync(options, cancellationToken);
if (CancellationTokenProvider.Token.IsCancellationRequested)
if (cancellationTokenProvider.Token.IsCancellationRequested)
{
return;
}
@ -104,6 +93,8 @@ public class FeatureDynamicInitializer : ITransientDependency
return;
}
var staticFeatureSaver = ServiceProvider.GetRequiredService<IStaticFeatureSaver>();
await Policy
.Handle<Exception>()
.WaitAndRetryAsync(
@ -118,7 +109,7 @@ public class FeatureDynamicInitializer : ITransientDependency
{
try
{
await StaticFeatureSaver.SaveAsync();
await staticFeatureSaver.SaveAsync();
}
catch (Exception ex)
{
@ -128,17 +119,20 @@ public class FeatureDynamicInitializer : ITransientDependency
}, cancellationToken);
}
protected virtual async Task PreCacheDynamicFeaturesAsync(FeatureManagementOptions options)
protected virtual async Task PreCacheDynamicFeaturesAsync(
FeatureManagementOptions options)
{
if (!options.IsDynamicFeatureStoreEnabled)
{
return;
}
var dynamicFeatureDefinitionStore = ServiceProvider.GetRequiredService<IDynamicFeatureDefinitionStore>();
try
{
// Pre-cache features, so first request doesn't wait
await DynamicFeatureDefinitionStore.GetGroupsAsync();
await dynamicFeatureDefinitionStore.GetGroupsAsync();
}
catch (Exception ex)
{

52
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionDynamicInitializer.cs

@ -1,7 +1,6 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
@ -19,33 +18,19 @@ public class PermissionDynamicInitializer : ITransientDependency
public ILogger<PermissionDynamicInitializer> Logger { get; set; }
protected IServiceProvider ServiceProvider { get; }
protected IOptions<PermissionManagementOptions> Options { get; }
[CanBeNull]
protected IHostApplicationLifetime ApplicationLifetime { get; }
protected ICancellationTokenProvider CancellationTokenProvider { get; }
protected IDynamicPermissionDefinitionStore DynamicPermissionDefinitionStore { get; }
protected IStaticPermissionSaver StaticPermissionSaver { get; }
public PermissionDynamicInitializer(
IServiceProvider serviceProvider,
IOptions<PermissionManagementOptions> options,
ICancellationTokenProvider cancellationTokenProvider,
IDynamicPermissionDefinitionStore dynamicPermissionDefinitionStore,
IStaticPermissionSaver staticPermissionSaver)
public PermissionDynamicInitializer(IServiceProvider serviceProvider)
{
Logger = NullLogger<PermissionDynamicInitializer>.Instance;
ServiceProvider = serviceProvider;
Options = options;
ApplicationLifetime = ServiceProvider.GetService<IHostApplicationLifetime>();
CancellationTokenProvider = cancellationTokenProvider;
DynamicPermissionDefinitionStore = dynamicPermissionDefinitionStore;
StaticPermissionSaver = staticPermissionSaver;
}
public virtual Task InitializeAsync(bool runInBackground, CancellationToken cancellationToken = default)
{
var options = Options.Value;
var options = ServiceProvider
.GetRequiredService<IOptions<PermissionManagementOptions>>()
.Value;
if (!options.SaveStaticPermissionsToDatabase && !options.IsDynamicPermissionStoreEnabled)
{
@ -54,11 +39,12 @@ public class PermissionDynamicInitializer : ITransientDependency
if (runInBackground)
{
var applicationLifetime = ServiceProvider.GetService<IHostApplicationLifetime>();
Task.Run(async () =>
{
if (cancellationToken == default && ApplicationLifetime?.ApplicationStopping != null)
if (cancellationToken == default && applicationLifetime?.ApplicationStopping != null)
{
cancellationToken = ApplicationLifetime.ApplicationStopping;
cancellationToken = applicationLifetime.ApplicationStopping;
}
await ExecuteInitializationAsync(options, cancellationToken);
}, cancellationToken);
@ -68,20 +54,23 @@ public class PermissionDynamicInitializer : ITransientDependency
return ExecuteInitializationAsync(options, cancellationToken);
}
protected virtual async Task ExecuteInitializationAsync(PermissionManagementOptions options, CancellationToken cancellationToken)
protected virtual async Task ExecuteInitializationAsync(
PermissionManagementOptions options,
CancellationToken cancellationToken)
{
try
{
using (CancellationTokenProvider.Use(cancellationToken))
var cancellationTokenProvider = ServiceProvider.GetRequiredService<ICancellationTokenProvider>();
using (cancellationTokenProvider.Use(cancellationToken))
{
if (CancellationTokenProvider.Token.IsCancellationRequested)
if (cancellationTokenProvider.Token.IsCancellationRequested)
{
return;
}
await SaveStaticPermissionsToDatabaseAsync(options, cancellationToken);
if (CancellationTokenProvider.Token.IsCancellationRequested)
if (cancellationTokenProvider.Token.IsCancellationRequested)
{
return;
}
@ -104,6 +93,8 @@ public class PermissionDynamicInitializer : ITransientDependency
return;
}
var staticPermissionSaver = ServiceProvider.GetRequiredService<IStaticPermissionSaver>();
await Policy
.Handle<Exception>()
.WaitAndRetryAsync(
@ -118,7 +109,7 @@ public class PermissionDynamicInitializer : ITransientDependency
{
try
{
await StaticPermissionSaver.SaveAsync();
await staticPermissionSaver.SaveAsync();
}
catch (Exception ex)
{
@ -129,17 +120,20 @@ public class PermissionDynamicInitializer : ITransientDependency
}, cancellationToken);
}
protected virtual async Task PreCacheDynamicPermissionsAsync(PermissionManagementOptions options)
protected virtual async Task PreCacheDynamicPermissionsAsync(
PermissionManagementOptions options)
{
if (!options.IsDynamicPermissionStoreEnabled)
{
return;
}
var dynamicPermissionDefinitionStore = ServiceProvider.GetRequiredService<IDynamicPermissionDefinitionStore>();
try
{
// Pre-cache permissions, so first request doesn't wait
await DynamicPermissionDefinitionStore.GetGroupsAsync();
await dynamicPermissionDefinitionStore.GetGroupsAsync();
}
catch (Exception ex)
{

52
modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingDynamicInitializer.cs

@ -1,7 +1,6 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
@ -19,33 +18,19 @@ public class SettingDynamicInitializer : ITransientDependency
public ILogger<SettingDynamicInitializer> Logger { get; set; }
protected IServiceProvider ServiceProvider { get; }
protected IOptions<SettingManagementOptions> Options { get; }
[CanBeNull]
protected IHostApplicationLifetime ApplicationLifetime { get; }
protected ICancellationTokenProvider CancellationTokenProvider { get; }
protected IDynamicSettingDefinitionStore DynamicSettingDefinitionStore { get; }
protected IStaticSettingSaver StaticSettingSaver { get; }
public SettingDynamicInitializer(
IServiceProvider serviceProvider,
IOptions<SettingManagementOptions> options,
ICancellationTokenProvider cancellationTokenProvider,
IDynamicSettingDefinitionStore dynamicSettingDefinitionStore,
IStaticSettingSaver staticSettingSaver)
public SettingDynamicInitializer(IServiceProvider serviceProvider)
{
Logger = NullLogger<SettingDynamicInitializer>.Instance;
ServiceProvider = serviceProvider;
Options = options;
ApplicationLifetime = ServiceProvider.GetService<IHostApplicationLifetime>();
CancellationTokenProvider = cancellationTokenProvider;
DynamicSettingDefinitionStore = dynamicSettingDefinitionStore;
StaticSettingSaver = staticSettingSaver;
}
public virtual Task InitializeAsync(bool runInBackground, CancellationToken cancellationToken = default)
{
var options = Options.Value;
var options = ServiceProvider
.GetRequiredService<IOptions<SettingManagementOptions>>()
.Value;
if (!options.SaveStaticSettingsToDatabase && !options.IsDynamicSettingStoreEnabled)
{
@ -54,11 +39,12 @@ public class SettingDynamicInitializer : ITransientDependency
if (runInBackground)
{
var applicationLifetime = ServiceProvider.GetService<IHostApplicationLifetime>();
Task.Run(async () =>
{
if (cancellationToken == default && ApplicationLifetime?.ApplicationStopping != null)
if (cancellationToken == default && applicationLifetime?.ApplicationStopping != null)
{
cancellationToken = ApplicationLifetime.ApplicationStopping;
cancellationToken = applicationLifetime.ApplicationStopping;
}
await ExecuteInitializationAsync(options, cancellationToken);
}, cancellationToken);
@ -69,20 +55,23 @@ public class SettingDynamicInitializer : ITransientDependency
return ExecuteInitializationAsync(options, cancellationToken);
}
protected virtual async Task ExecuteInitializationAsync(SettingManagementOptions options, CancellationToken cancellationToken)
protected virtual async Task ExecuteInitializationAsync(
SettingManagementOptions options,
CancellationToken cancellationToken)
{
try
{
using (CancellationTokenProvider.Use(cancellationToken))
var cancellationTokenProvider = ServiceProvider.GetRequiredService<ICancellationTokenProvider>();
using (cancellationTokenProvider.Use(cancellationToken))
{
if (CancellationTokenProvider.Token.IsCancellationRequested)
if (cancellationTokenProvider.Token.IsCancellationRequested)
{
return;
}
await SaveStaticSettingsToDatabaseAsync(options, cancellationToken);
if (CancellationTokenProvider.Token.IsCancellationRequested)
if (cancellationTokenProvider.Token.IsCancellationRequested)
{
return;
}
@ -105,6 +94,8 @@ public class SettingDynamicInitializer : ITransientDependency
return;
}
var staticSettingSaver = ServiceProvider.GetRequiredService<IStaticSettingSaver>();
await Policy
.Handle<Exception>()
.WaitAndRetryAsync(
@ -119,7 +110,7 @@ public class SettingDynamicInitializer : ITransientDependency
{
try
{
await StaticSettingSaver.SaveAsync();
await staticSettingSaver.SaveAsync();
}
catch (Exception ex)
{
@ -129,17 +120,20 @@ public class SettingDynamicInitializer : ITransientDependency
}, cancellationToken);
}
protected virtual async Task PreCacheDynamicSettingsAsync(SettingManagementOptions options)
protected virtual async Task PreCacheDynamicSettingsAsync(
SettingManagementOptions options)
{
if (!options.IsDynamicSettingStoreEnabled)
{
return;
}
var dynamicSettingDefinitionStore = ServiceProvider.GetRequiredService<IDynamicSettingDefinitionStore>();
try
{
// Pre-cache settings, so first request doesn't wait
await DynamicSettingDefinitionStore.GetAllAsync();
await dynamicSettingDefinitionStore.GetAllAsync();
}
catch (Exception ex)
{

Loading…
Cancel
Save