Browse Source

Merge pull request #24583 from abpframework/auto-merge/rel-10-0/4256

Merge branch rel-10.1 with rel-10.0
pull/24584/head
Ma Liming 4 weeks ago
committed by GitHub
parent
commit
fbcf8a0a0a
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  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;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@ -19,33 +18,19 @@ public class FeatureDynamicInitializer : ITransientDependency
public ILogger<FeatureDynamicInitializer> Logger { get; set; } public ILogger<FeatureDynamicInitializer> Logger { get; set; }
protected IServiceProvider ServiceProvider { get; } protected IServiceProvider ServiceProvider { get; }
protected IOptions<FeatureManagementOptions> Options { get; }
[CanBeNull] public FeatureDynamicInitializer(IServiceProvider serviceProvider)
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)
{ {
Logger = NullLogger<FeatureDynamicInitializer>.Instance; Logger = NullLogger<FeatureDynamicInitializer>.Instance;
ServiceProvider = serviceProvider; ServiceProvider = serviceProvider;
Options = options;
ApplicationLifetime = ServiceProvider.GetService<IHostApplicationLifetime>();
CancellationTokenProvider = cancellationTokenProvider;
DynamicFeatureDefinitionStore = dynamicFeatureDefinitionStore;
StaticFeatureSaver = staticFeatureSaver;
} }
public virtual Task InitializeAsync(bool runInBackground, CancellationToken cancellationToken = default) 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) if (!options.SaveStaticFeaturesToDatabase && !options.IsDynamicFeatureStoreEnabled)
{ {
@ -54,11 +39,12 @@ public class FeatureDynamicInitializer : ITransientDependency
if (runInBackground) if (runInBackground)
{ {
var applicationLifetime = ServiceProvider.GetService<IHostApplicationLifetime>();
Task.Run(async () => 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); await ExecuteInitializationAsync(options, cancellationToken);
}, cancellationToken); }, cancellationToken);
@ -68,20 +54,23 @@ public class FeatureDynamicInitializer : ITransientDependency
return ExecuteInitializationAsync(options, cancellationToken); return ExecuteInitializationAsync(options, cancellationToken);
} }
protected virtual async Task ExecuteInitializationAsync(FeatureManagementOptions options, CancellationToken cancellationToken) protected virtual async Task ExecuteInitializationAsync(
FeatureManagementOptions options,
CancellationToken cancellationToken)
{ {
try try
{ {
using (CancellationTokenProvider.Use(cancellationToken)) var cancellationTokenProvider = ServiceProvider.GetRequiredService<ICancellationTokenProvider>();
using (cancellationTokenProvider.Use(cancellationToken))
{ {
if (CancellationTokenProvider.Token.IsCancellationRequested) if (cancellationTokenProvider.Token.IsCancellationRequested)
{ {
return; return;
} }
await SaveStaticFeaturesToDatabaseAsync(options, cancellationToken); await SaveStaticFeaturesToDatabaseAsync(options, cancellationToken);
if (CancellationTokenProvider.Token.IsCancellationRequested) if (cancellationTokenProvider.Token.IsCancellationRequested)
{ {
return; return;
} }
@ -104,6 +93,8 @@ public class FeatureDynamicInitializer : ITransientDependency
return; return;
} }
var staticFeatureSaver = ServiceProvider.GetRequiredService<IStaticFeatureSaver>();
await Policy await Policy
.Handle<Exception>() .Handle<Exception>()
.WaitAndRetryAsync( .WaitAndRetryAsync(
@ -118,7 +109,7 @@ public class FeatureDynamicInitializer : ITransientDependency
{ {
try try
{ {
await StaticFeatureSaver.SaveAsync(); await staticFeatureSaver.SaveAsync();
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -128,17 +119,20 @@ public class FeatureDynamicInitializer : ITransientDependency
}, cancellationToken); }, cancellationToken);
} }
protected virtual async Task PreCacheDynamicFeaturesAsync(FeatureManagementOptions options) protected virtual async Task PreCacheDynamicFeaturesAsync(
FeatureManagementOptions options)
{ {
if (!options.IsDynamicFeatureStoreEnabled) if (!options.IsDynamicFeatureStoreEnabled)
{ {
return; return;
} }
var dynamicFeatureDefinitionStore = ServiceProvider.GetRequiredService<IDynamicFeatureDefinitionStore>();
try try
{ {
// Pre-cache features, so first request doesn't wait // Pre-cache features, so first request doesn't wait
await DynamicFeatureDefinitionStore.GetGroupsAsync(); await dynamicFeatureDefinitionStore.GetGroupsAsync();
} }
catch (Exception ex) 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;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@ -19,33 +18,19 @@ public class PermissionDynamicInitializer : ITransientDependency
public ILogger<PermissionDynamicInitializer> Logger { get; set; } public ILogger<PermissionDynamicInitializer> Logger { get; set; }
protected IServiceProvider ServiceProvider { get; } protected IServiceProvider ServiceProvider { get; }
protected IOptions<PermissionManagementOptions> Options { get; }
[CanBeNull] public PermissionDynamicInitializer(IServiceProvider serviceProvider)
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)
{ {
Logger = NullLogger<PermissionDynamicInitializer>.Instance; Logger = NullLogger<PermissionDynamicInitializer>.Instance;
ServiceProvider = serviceProvider; ServiceProvider = serviceProvider;
Options = options;
ApplicationLifetime = ServiceProvider.GetService<IHostApplicationLifetime>();
CancellationTokenProvider = cancellationTokenProvider;
DynamicPermissionDefinitionStore = dynamicPermissionDefinitionStore;
StaticPermissionSaver = staticPermissionSaver;
} }
public virtual Task InitializeAsync(bool runInBackground, CancellationToken cancellationToken = default) 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) if (!options.SaveStaticPermissionsToDatabase && !options.IsDynamicPermissionStoreEnabled)
{ {
@ -54,11 +39,12 @@ public class PermissionDynamicInitializer : ITransientDependency
if (runInBackground) if (runInBackground)
{ {
var applicationLifetime = ServiceProvider.GetService<IHostApplicationLifetime>();
Task.Run(async () => 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); await ExecuteInitializationAsync(options, cancellationToken);
}, cancellationToken); }, cancellationToken);
@ -68,20 +54,23 @@ public class PermissionDynamicInitializer : ITransientDependency
return ExecuteInitializationAsync(options, cancellationToken); return ExecuteInitializationAsync(options, cancellationToken);
} }
protected virtual async Task ExecuteInitializationAsync(PermissionManagementOptions options, CancellationToken cancellationToken) protected virtual async Task ExecuteInitializationAsync(
PermissionManagementOptions options,
CancellationToken cancellationToken)
{ {
try try
{ {
using (CancellationTokenProvider.Use(cancellationToken)) var cancellationTokenProvider = ServiceProvider.GetRequiredService<ICancellationTokenProvider>();
using (cancellationTokenProvider.Use(cancellationToken))
{ {
if (CancellationTokenProvider.Token.IsCancellationRequested) if (cancellationTokenProvider.Token.IsCancellationRequested)
{ {
return; return;
} }
await SaveStaticPermissionsToDatabaseAsync(options, cancellationToken); await SaveStaticPermissionsToDatabaseAsync(options, cancellationToken);
if (CancellationTokenProvider.Token.IsCancellationRequested) if (cancellationTokenProvider.Token.IsCancellationRequested)
{ {
return; return;
} }
@ -104,6 +93,8 @@ public class PermissionDynamicInitializer : ITransientDependency
return; return;
} }
var staticPermissionSaver = ServiceProvider.GetRequiredService<IStaticPermissionSaver>();
await Policy await Policy
.Handle<Exception>() .Handle<Exception>()
.WaitAndRetryAsync( .WaitAndRetryAsync(
@ -118,7 +109,7 @@ public class PermissionDynamicInitializer : ITransientDependency
{ {
try try
{ {
await StaticPermissionSaver.SaveAsync(); await staticPermissionSaver.SaveAsync();
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -129,17 +120,20 @@ public class PermissionDynamicInitializer : ITransientDependency
}, cancellationToken); }, cancellationToken);
} }
protected virtual async Task PreCacheDynamicPermissionsAsync(PermissionManagementOptions options) protected virtual async Task PreCacheDynamicPermissionsAsync(
PermissionManagementOptions options)
{ {
if (!options.IsDynamicPermissionStoreEnabled) if (!options.IsDynamicPermissionStoreEnabled)
{ {
return; return;
} }
var dynamicPermissionDefinitionStore = ServiceProvider.GetRequiredService<IDynamicPermissionDefinitionStore>();
try try
{ {
// Pre-cache permissions, so first request doesn't wait // Pre-cache permissions, so first request doesn't wait
await DynamicPermissionDefinitionStore.GetGroupsAsync(); await dynamicPermissionDefinitionStore.GetGroupsAsync();
} }
catch (Exception ex) 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;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@ -19,33 +18,19 @@ public class SettingDynamicInitializer : ITransientDependency
public ILogger<SettingDynamicInitializer> Logger { get; set; } public ILogger<SettingDynamicInitializer> Logger { get; set; }
protected IServiceProvider ServiceProvider { get; } protected IServiceProvider ServiceProvider { get; }
protected IOptions<SettingManagementOptions> Options { get; }
[CanBeNull] public SettingDynamicInitializer(IServiceProvider serviceProvider)
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)
{ {
Logger = NullLogger<SettingDynamicInitializer>.Instance; Logger = NullLogger<SettingDynamicInitializer>.Instance;
ServiceProvider = serviceProvider; ServiceProvider = serviceProvider;
Options = options;
ApplicationLifetime = ServiceProvider.GetService<IHostApplicationLifetime>();
CancellationTokenProvider = cancellationTokenProvider;
DynamicSettingDefinitionStore = dynamicSettingDefinitionStore;
StaticSettingSaver = staticSettingSaver;
} }
public virtual Task InitializeAsync(bool runInBackground, CancellationToken cancellationToken = default) 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) if (!options.SaveStaticSettingsToDatabase && !options.IsDynamicSettingStoreEnabled)
{ {
@ -54,11 +39,12 @@ public class SettingDynamicInitializer : ITransientDependency
if (runInBackground) if (runInBackground)
{ {
var applicationLifetime = ServiceProvider.GetService<IHostApplicationLifetime>();
Task.Run(async () => 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); await ExecuteInitializationAsync(options, cancellationToken);
}, cancellationToken); }, cancellationToken);
@ -69,20 +55,23 @@ public class SettingDynamicInitializer : ITransientDependency
return ExecuteInitializationAsync(options, cancellationToken); return ExecuteInitializationAsync(options, cancellationToken);
} }
protected virtual async Task ExecuteInitializationAsync(SettingManagementOptions options, CancellationToken cancellationToken) protected virtual async Task ExecuteInitializationAsync(
SettingManagementOptions options,
CancellationToken cancellationToken)
{ {
try try
{ {
using (CancellationTokenProvider.Use(cancellationToken)) var cancellationTokenProvider = ServiceProvider.GetRequiredService<ICancellationTokenProvider>();
using (cancellationTokenProvider.Use(cancellationToken))
{ {
if (CancellationTokenProvider.Token.IsCancellationRequested) if (cancellationTokenProvider.Token.IsCancellationRequested)
{ {
return; return;
} }
await SaveStaticSettingsToDatabaseAsync(options, cancellationToken); await SaveStaticSettingsToDatabaseAsync(options, cancellationToken);
if (CancellationTokenProvider.Token.IsCancellationRequested) if (cancellationTokenProvider.Token.IsCancellationRequested)
{ {
return; return;
} }
@ -105,6 +94,8 @@ public class SettingDynamicInitializer : ITransientDependency
return; return;
} }
var staticSettingSaver = ServiceProvider.GetRequiredService<IStaticSettingSaver>();
await Policy await Policy
.Handle<Exception>() .Handle<Exception>()
.WaitAndRetryAsync( .WaitAndRetryAsync(
@ -119,7 +110,7 @@ public class SettingDynamicInitializer : ITransientDependency
{ {
try try
{ {
await StaticSettingSaver.SaveAsync(); await staticSettingSaver.SaveAsync();
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -129,17 +120,20 @@ public class SettingDynamicInitializer : ITransientDependency
}, cancellationToken); }, cancellationToken);
} }
protected virtual async Task PreCacheDynamicSettingsAsync(SettingManagementOptions options) protected virtual async Task PreCacheDynamicSettingsAsync(
SettingManagementOptions options)
{ {
if (!options.IsDynamicSettingStoreEnabled) if (!options.IsDynamicSettingStoreEnabled)
{ {
return; return;
} }
var dynamicSettingDefinitionStore = ServiceProvider.GetRequiredService<IDynamicSettingDefinitionStore>();
try try
{ {
// Pre-cache settings, so first request doesn't wait // Pre-cache settings, so first request doesn't wait
await DynamicSettingDefinitionStore.GetAllAsync(); await dynamicSettingDefinitionStore.GetAllAsync();
} }
catch (Exception ex) catch (Exception ex)
{ {

Loading…
Cancel
Save