From 93ef2a2d67f5a08308f3809adaba58adc2f7a43b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 4 Nov 2022 10:23:52 +0300 Subject: [PATCH] Introduce Application Instance Id & Rename IApplicationNameAccessor to IApplicationInfoAccessor --- .../ServiceCollectionApplicationExtensions.cs | 8 +++++++- .../Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs | 4 +++- .../src/Volo.Abp.Core/Volo/Abp/IAbpApplication.cs | 2 +- ...nNameAccessor.cs => IApplicationInfoAccessor.cs} | 9 ++++++++- .../Volo/Abp/AbpApplication_Initialize_Tests.cs | 13 ++++++------- .../Abp/FeatureManagement/StaticFeatureSaver.cs | 10 +++++----- .../PermissionManagement/StaticPermissionSaver.cs | 10 +++++----- 7 files changed, 35 insertions(+), 21 deletions(-) rename framework/src/Volo.Abp.Core/Volo/Abp/{IApplicationNameAccessor.cs => IApplicationInfoAccessor.cs} (54%) diff --git a/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionApplicationExtensions.cs b/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionApplicationExtensions.cs index 72ce661ed52..278814780d9 100644 --- a/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionApplicationExtensions.cs +++ b/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionApplicationExtensions.cs @@ -43,6 +43,12 @@ public async static Task AddApplicat [CanBeNull] public static string GetApplicationName(this IServiceCollection services) { - return services.GetSingletonInstance().ApplicationName; + return services.GetSingletonInstance().ApplicationName; + } + + [NotNull] + public static string GetApplicationInstanceId(this IServiceCollection services) + { + return services.GetSingletonInstance().InstanceId; } } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs b/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs index 74f263198b5..fd91b09982e 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs @@ -26,6 +26,8 @@ public abstract class AbpApplicationBase : IAbpApplication public string ApplicationName { get; } + public string InstanceId { get; } = Guid.NewGuid().ToString(); + private bool _configuredServices; internal AbpApplicationBase( @@ -47,7 +49,7 @@ internal AbpApplicationBase( ApplicationName = GetApplicationName(options); services.AddSingleton(this); - services.AddSingleton(this); + services.AddSingleton(this); services.AddSingleton(this); services.AddCoreServices(); diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/IAbpApplication.cs b/framework/src/Volo.Abp.Core/Volo/Abp/IAbpApplication.cs index 35542ee91f0..9543e18bd34 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/IAbpApplication.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/IAbpApplication.cs @@ -7,7 +7,7 @@ namespace Volo.Abp; public interface IAbpApplication : IModuleContainer, - IApplicationNameAccessor, + IApplicationInfoAccessor, IDisposable { /// diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/IApplicationNameAccessor.cs b/framework/src/Volo.Abp.Core/Volo/Abp/IApplicationInfoAccessor.cs similarity index 54% rename from framework/src/Volo.Abp.Core/Volo/Abp/IApplicationNameAccessor.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/IApplicationInfoAccessor.cs index e814a0c317c..01d20cfbc7b 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/IApplicationNameAccessor.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/IApplicationInfoAccessor.cs @@ -2,7 +2,7 @@ namespace Volo.Abp; -public interface IApplicationNameAccessor +public interface IApplicationInfoAccessor { /// /// Name of the application. @@ -11,4 +11,11 @@ public interface IApplicationNameAccessor /// [CanBeNull] string ApplicationName { get; } + + /// + /// A unique identifier for this application instance. + /// This value changes whenever the application is restarted. + /// + [NotNull] + string InstanceId { get; } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/AbpApplication_Initialize_Tests.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/AbpApplication_Initialize_Tests.cs index 0123bf1d0d7..cf54b1492ae 100644 --- a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/AbpApplication_Initialize_Tests.cs +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/AbpApplication_Initialize_Tests.cs @@ -151,7 +151,7 @@ public void Should_Initialize_PlugIn() } [Fact] - public void Should_Set_And_Get_ApplicationName() + public void Should_Set_And_Get_ApplicationName_And_InstanceId() { var applicationName = "MyApplication"; @@ -165,10 +165,9 @@ public void Should_Set_And_Get_ApplicationName() application.Initialize(); - application.ServiceProvider - .GetRequiredService() - .ApplicationName - .ShouldBe(applicationName); + var appInfo = application.ServiceProvider.GetRequiredService(); + appInfo.ApplicationName.ShouldBe(applicationName); + appInfo.InstanceId.ShouldNotBeNullOrEmpty(); } using (var application = AbpApplicationFactory.Create(options => @@ -185,7 +184,7 @@ public void Should_Set_And_Get_ApplicationName() application.Initialize(); application.ServiceProvider - .GetRequiredService() + .GetRequiredService() .ApplicationName .ShouldBe(applicationName); } @@ -199,7 +198,7 @@ public void Should_Set_And_Get_ApplicationName() application.Initialize(); application.ServiceProvider - .GetRequiredService() + .GetRequiredService() .ApplicationName .ShouldBe(applicationName); } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/StaticFeatureSaver.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/StaticFeatureSaver.cs index 8786f9ddb62..5b3e5815184 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/StaticFeatureSaver.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/StaticFeatureSaver.cs @@ -22,7 +22,7 @@ public class StaticFeatureSaver : IStaticFeatureSaver, ITransientDependency protected IFeatureDefinitionRecordRepository FeatureRepository { get; } protected IFeatureDefinitionSerializer FeatureSerializer { get; } protected IDistributedCache Cache { get; } - protected IApplicationNameAccessor ApplicationNameAccessor { get; } + protected IApplicationInfoAccessor ApplicationInfoAccessor { get; } protected IAbpDistributedLock DistributedLock { get; } protected AbpFeatureOptions FeatureOptions { get; } protected ICancellationTokenProvider CancellationTokenProvider { get; } @@ -35,7 +35,7 @@ public StaticFeatureSaver( IFeatureDefinitionSerializer featureSerializer, IDistributedCache cache, IOptions cacheOptions, - IApplicationNameAccessor applicationNameAccessor, + IApplicationInfoAccessor applicationInfoAccessor, IAbpDistributedLock distributedLock, IOptions featureManagementOptions, ICancellationTokenProvider cancellationTokenProvider) @@ -45,7 +45,7 @@ public StaticFeatureSaver( FeatureRepository = featureRepository; FeatureSerializer = featureSerializer; Cache = cache; - ApplicationNameAccessor = applicationNameAccessor; + ApplicationInfoAccessor = applicationInfoAccessor; DistributedLock = distributedLock; CancellationTokenProvider = cancellationTokenProvider; FeatureOptions = featureManagementOptions.Value; @@ -249,7 +249,7 @@ private async Task UpdateChangedFeaturesAsync( private string GetApplicationDistributedLockKey() { - return $"{CacheOptions.KeyPrefix}_{ApplicationNameAccessor.ApplicationName}_AbpFeatureUpdateLock"; + return $"{CacheOptions.KeyPrefix}_{ApplicationInfoAccessor.ApplicationName}_AbpFeatureUpdateLock"; } private string GetCommonDistributedLockKey() @@ -259,7 +259,7 @@ private string GetCommonDistributedLockKey() private string GetApplicationHashCacheKey() { - return $"{CacheOptions.KeyPrefix}_{ApplicationNameAccessor.ApplicationName}_AbpFeaturesHash"; + return $"{CacheOptions.KeyPrefix}_{ApplicationInfoAccessor.ApplicationName}_AbpFeaturesHash"; } private string GetCommonStampCacheKey() diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/StaticPermissionSaver.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/StaticPermissionSaver.cs index ba0be474f83..594f400a433 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/StaticPermissionSaver.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/StaticPermissionSaver.cs @@ -22,7 +22,7 @@ public class StaticPermissionSaver : IStaticPermissionSaver, ITransientDependenc protected IPermissionDefinitionRecordRepository PermissionRepository { get; } protected IPermissionDefinitionSerializer PermissionSerializer { get; } protected IDistributedCache Cache { get; } - protected IApplicationNameAccessor ApplicationNameAccessor { get; } + protected IApplicationInfoAccessor ApplicationInfoAccessor { get; } protected IAbpDistributedLock DistributedLock { get; } protected AbpPermissionOptions PermissionOptions { get; } protected ICancellationTokenProvider CancellationTokenProvider { get; } @@ -35,7 +35,7 @@ public StaticPermissionSaver( IPermissionDefinitionSerializer permissionSerializer, IDistributedCache cache, IOptions cacheOptions, - IApplicationNameAccessor applicationNameAccessor, + IApplicationInfoAccessor applicationInfoAccessor, IAbpDistributedLock distributedLock, IOptions permissionOptions, ICancellationTokenProvider cancellationTokenProvider) @@ -45,7 +45,7 @@ public StaticPermissionSaver( PermissionRepository = permissionRepository; PermissionSerializer = permissionSerializer; Cache = cache; - ApplicationNameAccessor = applicationNameAccessor; + ApplicationInfoAccessor = applicationInfoAccessor; DistributedLock = distributedLock; CancellationTokenProvider = cancellationTokenProvider; PermissionOptions = permissionOptions.Value; @@ -249,7 +249,7 @@ private async Task UpdateChangedPermissionsAsync( private string GetApplicationDistributedLockKey() { - return $"{CacheOptions.KeyPrefix}_{ApplicationNameAccessor.ApplicationName}_AbpPermissionUpdateLock"; + return $"{CacheOptions.KeyPrefix}_{ApplicationInfoAccessor.ApplicationName}_AbpPermissionUpdateLock"; } private string GetCommonDistributedLockKey() @@ -259,7 +259,7 @@ private string GetCommonDistributedLockKey() private string GetApplicationHashCacheKey() { - return $"{CacheOptions.KeyPrefix}_{ApplicationNameAccessor.ApplicationName}_AbpPermissionsHash"; + return $"{CacheOptions.KeyPrefix}_{ApplicationInfoAccessor.ApplicationName}_AbpPermissionsHash"; } private string GetCommonStampCacheKey()