From a928538f715c80832ce583d548b027e739c06353 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Thu, 11 Oct 2018 16:04:58 +0300 Subject: [PATCH] Resolved #545: User secrets integration for the aspnet core module --- .../AbpHostingEnvironmentExtensions.cs | 21 +++++++++++++--- .../AbpAspNetCoreConfigurationOptions.cs | 24 +++++++++++++++++++ ...bpAspNetCoreServiceCollectionExtensions.cs | 10 ++++---- .../Volo.Abp.AspNetCore.csproj | 3 ++- .../Abp/AspNetCore/AbpAspNetCoreModule.cs | 6 ++++- ...erviceCollectionConfigurationExtensions.cs | 2 +- .../ConfigurationAccessor_Tests.cs | 2 +- 7 files changed, 56 insertions(+), 12 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/Configuration/AbpAspNetCoreConfigurationOptions.cs diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Hosting/AbpHostingEnvironmentExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Hosting/AbpHostingEnvironmentExtensions.cs index 5522f3b4b8..49eb511fd9 100644 --- a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Hosting/AbpHostingEnvironmentExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Hosting/AbpHostingEnvironmentExtensions.cs @@ -4,12 +4,27 @@ namespace Microsoft.AspNetCore.Hosting { public static class AbpHostingEnvironmentExtensions { - public static IConfigurationRoot BuildConfiguration(this IHostingEnvironment env, string fileName = "appsettings") + public static IConfigurationRoot BuildConfiguration(this IHostingEnvironment env, AbpAspNetCoreConfigurationOptions options = null) { + options = options ?? new AbpAspNetCoreConfigurationOptions(); + var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) - .AddJsonFile(fileName + ".json", optional: true, reloadOnChange: true) - .AddJsonFile($"{fileName}.{env.EnvironmentName}.json", optional: true, reloadOnChange: true); + .AddJsonFile(options.FileName + ".json", optional: true, reloadOnChange: true) + .AddJsonFile($"{options.FileName}.{env.EnvironmentName}.json", optional: true, reloadOnChange: true) + .AddEnvironmentVariables(); + + if (env.IsDevelopment()) + { + if (options.UserSecretsId != null) + { + builder.AddUserSecrets(options.UserSecretsId); + } + else if (options.UserSecretsAssembly != null) + { + builder.AddUserSecrets(options.UserSecretsAssembly, true); + } + } return builder.Build(); } diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/Configuration/AbpAspNetCoreConfigurationOptions.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/Configuration/AbpAspNetCoreConfigurationOptions.cs new file mode 100644 index 0000000000..ec8757d8a1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/Configuration/AbpAspNetCoreConfigurationOptions.cs @@ -0,0 +1,24 @@ +using System.Reflection; + +namespace Microsoft.Extensions.Configuration +{ + public class AbpAspNetCoreConfigurationOptions + { + /// + /// Used to set assembly which is used to get the user secret id for the application. + /// Use this or (higher priority) + /// + public Assembly UserSecretsAssembly { get; set; } + + /// + /// Used to set user secret id for the application. + /// Use this (higher priority) or + /// + public string UserSecretsId { get; set; } + + /// + /// Default value: "appsettings". + /// + public string FileName { get; set; } = "appsettings"; + } +} diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs index 0bd8cb2576..735d3cb802 100644 --- a/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs @@ -10,15 +10,15 @@ namespace Microsoft.Extensions.DependencyInjection return services.GetSingletonInstance(); } - public static IConfigurationRoot BuildConfiguration(this IServiceCollection services, string fileName = "appsettings") + public static IConfigurationRoot BuildConfiguration(this IServiceCollection services, AbpAspNetCoreConfigurationOptions options = null) { - return services.GetHostingEnvironment().BuildConfiguration(fileName); + return services.GetHostingEnvironment().BuildConfiguration(options); } - public static IConfigurationRoot AddConfiguration(this IServiceCollection services, string fileName = "appsettings") + public static IConfigurationRoot AddConfiguration(this IServiceCollection services, AbpAspNetCoreConfigurationOptions options = null) { - var configuration = services.BuildConfiguration(fileName); - services.AddConfiguration(configuration); + var configuration = services.BuildConfiguration(options); + services.SetConfiguration(configuration); return configuration; } } diff --git a/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj b/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj index 52f7a106da..0ad65c5dea 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj +++ b/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj @@ -30,7 +30,8 @@ - + + diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs index 6fbe70f25f..7bd3cf8267 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs @@ -1,4 +1,5 @@ using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Auditing; using Volo.Abp.Auditing; @@ -38,7 +39,10 @@ namespace Volo.Abp.AspNetCore AddAspNetServices(context.Services); context.Services.AddObjectAccessor(); - context.Services.AddConfiguration(); + + context.Services.AddConfiguration( + context.Services.ExecutePreConfiguredActions() + ); } private static void AddAspNetServices(IServiceCollection services) 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 136623b2e6..940e7f6965 100644 --- a/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionConfigurationExtensions.cs +++ b/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionConfigurationExtensions.cs @@ -6,7 +6,7 @@ namespace Microsoft.Extensions.DependencyInjection { public static class ServiceCollectionConfigurationExtensions { - public static IServiceCollection AddConfiguration(this IServiceCollection services, IConfigurationRoot configurationRoot) + public static IServiceCollection SetConfiguration(this IServiceCollection services, IConfigurationRoot configurationRoot) { return services.Replace(ServiceDescriptor.Singleton(new DefaultConfigurationAccessor(configurationRoot))); } diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Configuration/ConfigurationAccessor_Tests.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Configuration/ConfigurationAccessor_Tests.cs index 03eb351502..a69af199ff 100644 --- a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Configuration/ConfigurationAccessor_Tests.cs +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Configuration/ConfigurationAccessor_Tests.cs @@ -30,7 +30,7 @@ namespace Volo.Abp.Configuration using (var application = AbpApplicationFactory.Create()) { var myConfiguration = new ConfigurationBuilder().Build(); - application.Services.AddConfiguration(myConfiguration); + application.Services.SetConfiguration(myConfiguration); application.Services.GetConfiguration().ShouldBe(myConfiguration); application.Initialize();