Resolved #1094: Configuration redesign.

pull/1940/head
Halil İbrahim Kalkan 6 years ago
parent 1f5756edba
commit 81ce88ee20

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

@ -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 =>

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

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

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

@ -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" />

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

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

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

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

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

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

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