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();