Browse Source

Resolved #1094: Configuration redesign.

pull/1940/head
Halil İbrahim Kalkan 6 years ago
parent
commit
81ce88ee20
  1. 18
      framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs
  2. 5
      framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs
  3. 5
      framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/AbpConfigurationBuilderOptions.cs
  4. 12
      framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs
  5. 13
      framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionConfigurationExtensions.cs
  6. 1
      framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj
  7. 23
      framework/src/Volo.Abp.Core/Volo/Abp/Configuration/DefaultConfigurationAccessor.cs
  8. 11
      framework/src/Volo.Abp.Core/Volo/Abp/Configuration/IConfigurationAccessor.cs
  9. 15
      framework/src/Volo.Abp.Core/Volo/Abp/Internal/InternalServiceCollectionExtensions.cs
  10. 26
      framework/test/SimpleConsoleDemo/Program.cs
  11. 20
      framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj
  12. 3
      framework/test/SimpleConsoleDemo/appsettings.json
  13. 7
      framework/test/Volo.Abp.Core.Tests/Volo/Abp/Configuration/ConfigurationAccessor_Tests.cs

18
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<IWebHostEnvironment>();
}
[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;
}
}
}

5
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<AbpAuditingOptions>(options =>

5
framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/AbpConfigurationBuilderOptions.cs

@ -35,5 +35,10 @@ namespace Microsoft.Extensions.Configuration
/// Prefix for the environment variables.
/// </summary>
public string EnvironmentVariablesPrefix { get; set; }
/// <summary>
/// Command line arguments.
/// </summary>
public string[] CommandLineArgs { get; set; }
}
}

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

13
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<IConfigurationAccessor>(new DefaultConfigurationAccessor(configurationRoot)));
return services.Replace(ServiceDescriptor.Singleton<IConfiguration>(configuration));
}
public static IConfigurationRoot GetConfiguration(this IServiceCollection services)
public static IConfiguration GetConfiguration(this IServiceCollection services)
{
var hostBuilderContext = services.GetSingletonInstanceOrNull<HostBuilderContext>();
if (hostBuilderContext?.Configuration != null)
@ -22,7 +19,7 @@ namespace Microsoft.Extensions.DependencyInjection
return hostBuilderContext.Configuration as IConfigurationRoot;
}
return services.GetSingletonInstance<IConfigurationAccessor>().Configuration;
return services.GetSingletonInstance<IConfiguration>();
}
}
}

1
framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj

@ -17,6 +17,7 @@
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.0.0" />

23
framework/src/Volo.Abp.Core/Volo/Abp/Configuration/DefaultConfigurationAccessor.cs

@ -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;
}
}
}

11
framework/src/Volo.Abp.Core/Volo/Abp/Configuration/IConfigurationAccessor.cs

@ -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; }
}
}

15
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<IConfigurationAccessor>(configurationAccessor);
if (!services.IsAdded<IConfiguration>())
{
services.AddSingleton<IConfiguration>(configurationAccessor.Configuration);
services.ReplaceConfiguration(
ConfigurationHelper.BuildConfiguration(
applicationCreationOptions.Configuration
)
);
}
services.TryAddSingleton<IModuleLoader>(moduleLoader);

26
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<MyConsoleModule>(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<IConfiguration>();
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<IMessageWriter>();
foreach (var writer in writers)
@ -25,6 +42,9 @@ namespace SimpleConsoleDemo
writer.Write();
}
Console.WriteLine();
Console.WriteLine("Press ENTER to exit!");
Console.ReadLine();
}
}

20
framework/test/SimpleConsoleDemo/SimpleConsoleDemo.csproj

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
@ -6,7 +6,23 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Volo.Abp.Core\Volo.Abp.Core.csproj" />
<None Remove="appsettings.json" />
</ItemGroup>
<ItemGroup>
<Content Include="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Volo.Abp.Autofac\Volo.Abp.Autofac.csproj" />
</ItemGroup>
</Project>

3
framework/test/SimpleConsoleDemo/appsettings.json

@ -0,0 +1,3 @@
{
"AppSettingKey1": "AppSettingValue1"
}

7
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<IndependentEmptyModule>())
{
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<IConfigurationAccessor>()
.Configuration;
.GetRequiredService<IConfiguration>();
}
}
}

Loading…
Cancel
Save