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 ecb641df34..33e685ac4e 100644 --- a/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs @@ -1,6 +1,4 @@ -using System; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; +using Microsoft.AspNetCore.Hosting; namespace Microsoft.Extensions.DependencyInjection { @@ -10,19 +8,5 @@ namespace Microsoft.Extensions.DependencyInjection { return services.GetSingletonInstance(); } - - [Obsolete] - public static IConfigurationRoot BuildConfiguration(this IServiceCollection services, AbpConfigurationBuilderOptions options = null) - { - return services.GetHostingEnvironment().BuildConfiguration(options); - } - - [Obsolete] - public static IConfigurationRoot AddConfiguration(this IServiceCollection services, AbpConfigurationBuilderOptions options = null) - { - var configuration = services.BuildConfiguration(options); - services.SetConfiguration(configuration); - return configuration; - } } } 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 f7cc0710e7..298fffd20e 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs @@ -29,11 +29,6 @@ namespace Volo.Abp.AspNetCore )] public class AbpAspNetCoreModule : AbpModule { - public override void PreConfigureServices(ServiceConfigurationContext context) - { - context.Services.AddConfiguration(); - } - public override void ConfigureServices(ServiceConfigurationContext context) { Configure(options => diff --git a/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/AbpConfigurationBuilderOptions.cs b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/AbpConfigurationBuilderOptions.cs index b9ca026791..93c9fe26c1 100644 --- a/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/AbpConfigurationBuilderOptions.cs +++ b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/AbpConfigurationBuilderOptions.cs @@ -35,5 +35,10 @@ namespace Microsoft.Extensions.Configuration /// Prefix for the environment variables. /// public string EnvironmentVariablesPrefix { get; set; } + + /// + /// Command line arguments. + /// + public string[] CommandLineArgs { get; set; } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs index 6c0fe12b15..44b75d1adb 100644 --- a/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs +++ b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs @@ -5,7 +5,8 @@ namespace Microsoft.Extensions.Configuration { public static class ConfigurationHelper { - public static IConfigurationRoot BuildConfiguration(AbpConfigurationBuilderOptions options = null) + public static IConfigurationRoot BuildConfiguration( + AbpConfigurationBuilderOptions options = null) { options = options ?? new AbpConfigurationBuilderOptions(); @@ -22,8 +23,6 @@ namespace Microsoft.Extensions.Configuration { builder = builder.AddJsonFile($"{options.FileName}.{options.EnvironmentName}.json", optional: true, reloadOnChange: true); } - - builder = builder.AddEnvironmentVariables(options.EnvironmentVariablesPrefix); if (options.EnvironmentName == "Development") { @@ -37,6 +36,13 @@ namespace Microsoft.Extensions.Configuration } } + builder = builder.AddEnvironmentVariables(options.EnvironmentVariablesPrefix); + + if (options.CommandLineArgs != null) + { + builder = builder.AddCommandLine(options.CommandLineArgs); + } + return builder.Build(); } } 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 97a6ed4189..bcd3892e87 100644 --- a/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionConfigurationExtensions.cs +++ b/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionConfigurationExtensions.cs @@ -1,20 +1,17 @@ -using System; -using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Hosting; -using Volo.Abp.Configuration; namespace Microsoft.Extensions.DependencyInjection { public static class ServiceCollectionConfigurationExtensions { - [Obsolete] - public static IServiceCollection SetConfiguration(this IServiceCollection services, IConfigurationRoot configurationRoot) + public static IServiceCollection ReplaceConfiguration(this IServiceCollection services, IConfiguration configuration) { - return services.Replace(ServiceDescriptor.Singleton(new DefaultConfigurationAccessor(configurationRoot))); + return services.Replace(ServiceDescriptor.Singleton(configuration)); } - public static IConfigurationRoot GetConfiguration(this IServiceCollection services) + public static IConfiguration GetConfiguration(this IServiceCollection services) { var hostBuilderContext = services.GetSingletonInstanceOrNull(); if (hostBuilderContext?.Configuration != null) @@ -22,7 +19,7 @@ namespace Microsoft.Extensions.DependencyInjection return hostBuilderContext.Configuration as IConfigurationRoot; } - return services.GetSingletonInstance().Configuration; + return services.GetSingletonInstance(); } } } diff --git a/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj b/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj index 7d6562e478..475525c41d 100644 --- a/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj +++ b/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj @@ -17,6 +17,7 @@ + diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Configuration/DefaultConfigurationAccessor.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Configuration/DefaultConfigurationAccessor.cs deleted file mode 100644 index 318972f549..0000000000 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Configuration/DefaultConfigurationAccessor.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Microsoft.Extensions.Configuration; - -namespace Volo.Abp.Configuration -{ - public class DefaultConfigurationAccessor : IConfigurationAccessor - { - public static DefaultConfigurationAccessor Empty { get; } - - public virtual IConfigurationRoot Configuration { get; } - - static DefaultConfigurationAccessor() - { - Empty = new DefaultConfigurationAccessor( - new ConfigurationBuilder().Build() - ); - } - - public DefaultConfigurationAccessor(IConfigurationRoot configuration) - { - Configuration = configuration; - } - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Configuration/IConfigurationAccessor.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Configuration/IConfigurationAccessor.cs deleted file mode 100644 index 34e5d96692..0000000000 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Configuration/IConfigurationAccessor.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; -using Microsoft.Extensions.Configuration; - -namespace Volo.Abp.Configuration -{ - [Obsolete("IConfigurationAccessor will be removed in v1.0. Use IConfiguration instead (be use that you are using generic host just like the startup templates).")] - public interface IConfigurationAccessor - { - IConfigurationRoot Configuration { get; } - } -} diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Internal/InternalServiceCollectionExtensions.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Internal/InternalServiceCollectionExtensions.cs index 7407f67bd6..83a7ec163e 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Internal/InternalServiceCollectionExtensions.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Internal/InternalServiceCollectionExtensions.cs @@ -1,7 +1,6 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; -using Volo.Abp.Configuration; using Volo.Abp.Modularity; using Volo.Abp.Reflection; @@ -24,17 +23,13 @@ namespace Volo.Abp.Internal var assemblyFinder = new AssemblyFinder(abpApplication); var typeFinder = new TypeFinder(assemblyFinder); - var configurationAccessor = new DefaultConfigurationAccessor( - ConfigurationHelper.BuildConfiguration( - applicationCreationOptions.Configuration - ) - ); - - services.TryAddSingleton(configurationAccessor); - if (!services.IsAdded()) { - services.AddSingleton(configurationAccessor.Configuration); + services.ReplaceConfiguration( + ConfigurationHelper.BuildConfiguration( + applicationCreationOptions.Configuration + ) + ); } services.TryAddSingleton(moduleLoader); diff --git a/framework/test/SimpleConsoleDemo/Program.cs b/framework/test/SimpleConsoleDemo/Program.cs index 08c6371bfb..82e6d0a660 100644 --- a/framework/test/SimpleConsoleDemo/Program.cs +++ b/framework/test/SimpleConsoleDemo/Program.cs @@ -1,4 +1,6 @@ using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Volo.Abp; using Volo.Abp.DependencyInjection; @@ -8,16 +10,31 @@ namespace SimpleConsoleDemo { class Program { - static void Main(string[] args) + static async Task Main(string[] args) { using (var application = AbpApplicationFactory.Create(options => { - + options.Configuration.CommandLineArgs = args; + options.UseAutofac(); })) { + Console.WriteLine("Initializing the application..."); application.Initialize(); + Console.WriteLine("Initializing the application... OK"); - Console.WriteLine("ABP initialized... Press ENTER to exit!"); + Console.WriteLine("Checking configuration..."); + + var configuration = application.ServiceProvider.GetRequiredService(); + if (configuration["AppSettingKey1"] != "AppSettingValue1") + { + Console.WriteLine("ERROR: Could not read the configuration!"); + Console.WriteLine("Press ENTER to exit!"); + Console.ReadLine(); + return; + } + + Console.WriteLine(); + Console.WriteLine("Checking configuration... OK"); var writers = application.ServiceProvider.GetServices(); foreach (var writer in writers) @@ -25,6 +42,9 @@ namespace SimpleConsoleDemo writer.Write(); } + + Console.WriteLine(); + Console.WriteLine("Press ENTER to exit!"); Console.ReadLine(); } } diff --git a/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj b/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj index 371e2374f9..6138532877 100644 --- a/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj +++ b/framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj @@ -1,4 +1,4 @@ - + Exe @@ -6,7 +6,23 @@ - + + + + + + PreserveNewest + true + PreserveNewest + + + + + + + + + diff --git a/framework/test/SimpleConsoleDemo/appsettings.json b/framework/test/SimpleConsoleDemo/appsettings.json new file mode 100644 index 0000000000..8a16cf34c3 --- /dev/null +++ b/framework/test/SimpleConsoleDemo/appsettings.json @@ -0,0 +1,3 @@ +{ + "AppSettingKey1": "AppSettingValue1" +} \ No newline at end of file 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 a69af199ff..3cb08d3924 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.SetConfiguration(myConfiguration); + application.Services.ReplaceConfiguration(myConfiguration); application.Services.GetConfiguration().ShouldBe(myConfiguration); application.Initialize(); @@ -41,12 +41,11 @@ namespace Volo.Abp.Configuration } } - private static IConfigurationRoot ResolveConfiguration(IAbpApplication application) + private static IConfiguration ResolveConfiguration(IAbpApplication application) { return application .ServiceProvider - .GetRequiredService() - .Configuration; + .GetRequiredService(); } } }