From a9eacacdb9fb0c91466b05ba88463cbf3d954b35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 20 Oct 2022 17:31:09 +0300 Subject: [PATCH] Get application name's default value from the entrance assembly --- ...erviceCollectionConfigurationExtensions.cs | 14 ++++++++-- .../Volo/Abp/AbpApplicationBase.cs | 28 ++++++++++++++++++- .../Volo/Abp/IApplicationNameAccessor.cs | 3 ++ 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionConfigurationExtensions.cs b/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionConfigurationExtensions.cs index 8e8fc47ad5..61cde24347 100644 --- a/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionConfigurationExtensions.cs +++ b/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionConfigurationExtensions.cs @@ -1,6 +1,8 @@ -using Microsoft.Extensions.Configuration; +using JetBrains.Annotations; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Hosting; +using Volo.Abp; namespace Microsoft.Extensions.DependencyInjection; @@ -11,7 +13,15 @@ public static class ServiceCollectionConfigurationExtensions return services.Replace(ServiceDescriptor.Singleton(configuration)); } + [NotNull] public static IConfiguration GetConfiguration(this IServiceCollection services) + { + return services.GetConfigurationOrNull() ?? + throw new AbpException("Could not find an implementation of " + typeof(IConfiguration).AssemblyQualifiedName + " in the service collection."); + } + + [CanBeNull] + public static IConfiguration GetConfigurationOrNull(this IServiceCollection services) { var hostBuilderContext = services.GetSingletonInstanceOrNull(); if (hostBuilderContext?.Configuration != null) @@ -19,6 +29,6 @@ public static class ServiceCollectionConfigurationExtensions return hostBuilderContext.Configuration as IConfigurationRoot; } - return services.GetSingletonInstance(); + return services.GetSingletonInstanceOrNull(); } } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs b/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs index 87ddf14c1b..eec9af02fb 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs @@ -44,7 +44,7 @@ public abstract class AbpApplicationBase : IAbpApplication var options = new AbpApplicationCreationOptions(services); optionsAction?.Invoke(options); - ApplicationName = options.ApplicationName; + ApplicationName = GetApplicationName(options); services.AddSingleton(this); services.AddSingleton(this); @@ -312,4 +312,30 @@ public abstract class AbpApplicationBase : IAbpApplication _configuredServices = true; } + + private static string GetApplicationName(AbpApplicationCreationOptions options) + { + if (!string.IsNullOrWhiteSpace(options.ApplicationName)) + { + return options.ApplicationName; + } + + var configuration = options.Services.GetConfigurationOrNull(); + if (configuration != null) + { + var appNameConfig = configuration["ApplicationName"]; + if (string.IsNullOrWhiteSpace(appNameConfig)) + { + return appNameConfig; + } + } + + var entryAssembly = Assembly.GetEntryAssembly(); + if (entryAssembly != null) + { + return entryAssembly.GetName().Name; + } + + return null; + } } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/IApplicationNameAccessor.cs b/framework/src/Volo.Abp.Core/Volo/Abp/IApplicationNameAccessor.cs index 0047fcbcdf..e814a0c317 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/IApplicationNameAccessor.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/IApplicationNameAccessor.cs @@ -1,3 +1,5 @@ +using JetBrains.Annotations; + namespace Volo.Abp; public interface IApplicationNameAccessor @@ -7,5 +9,6 @@ public interface IApplicationNameAccessor /// This is useful for systems with multiple applications, to distinguish /// resources of the applications located together. /// + [CanBeNull] string ApplicationName { get; } } \ No newline at end of file