Browse Source

Application configuration improvements

pull/699/head
Halil ibrahim Kalkan 8 years ago
parent
commit
a37ba2070f
  1. 31
      framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Hosting/AbpHostingEnvironmentExtensions.cs
  2. 4
      framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs
  3. 2
      framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj
  4. 10
      framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs
  5. 14
      framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationBuilderOptions.cs
  6. 43
      framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs
  7. 2
      framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj
  8. 2
      framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs
  9. 5
      framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationCreationOptions.cs
  10. 13
      framework/src/Volo.Abp.Core/Volo/Abp/Internal/InternalServiceCollectionExtensions.cs
  11. 4
      framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpDataModule.cs
  12. 8
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs
  13. 2
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs

31
framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Hosting/AbpHostingEnvironmentExtensions.cs

@ -1,32 +1,27 @@
using Microsoft.Extensions.Configuration;
using System;
using Microsoft.Extensions.Configuration;
namespace Microsoft.AspNetCore.Hosting
{
public static class AbpHostingEnvironmentExtensions
{
public static IConfigurationRoot BuildConfiguration(this IHostingEnvironment env, AbpAspNetCoreConfigurationOptions options = null)
public static IConfigurationRoot BuildConfiguration(
this IHostingEnvironment env,
ConfigurationBuilderOptions options = null)
{
options = options ?? new AbpAspNetCoreConfigurationOptions();
options = options ?? new ConfigurationBuilderOptions();
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile(options.FileName + ".json", optional: true, reloadOnChange: true)
.AddJsonFile($"{options.FileName}.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
if (options.BasePath.IsNullOrEmpty())
{
options.BasePath = env.ContentRootPath;
}
if (env.IsDevelopment())
if (options.EnvironmentName.IsNullOrEmpty())
{
if (options.UserSecretsId != null)
{
builder.AddUserSecrets(options.UserSecretsId);
}
else if (options.UserSecretsAssembly != null)
{
builder.AddUserSecrets(options.UserSecretsAssembly, true);
}
options.EnvironmentName = env.EnvironmentName;
}
return builder.Build();
return ConfigurationHelper.BuildConfiguration(options);
}
}
}

4
framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs

@ -10,12 +10,12 @@ namespace Microsoft.Extensions.DependencyInjection
return services.GetSingletonInstance<IHostingEnvironment>();
}
public static IConfigurationRoot BuildConfiguration(this IServiceCollection services, AbpAspNetCoreConfigurationOptions options = null)
public static IConfigurationRoot BuildConfiguration(this IServiceCollection services, ConfigurationBuilderOptions options = null)
{
return services.GetHostingEnvironment().BuildConfiguration(options);
}
public static IConfigurationRoot AddConfiguration(this IServiceCollection services, AbpAspNetCoreConfigurationOptions options = null)
public static IConfigurationRoot AddConfiguration(this IServiceCollection services, ConfigurationBuilderOptions options = null)
{
var configuration = services.BuildConfiguration(options);
services.SetConfiguration(configuration);

2
framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj

@ -30,8 +30,6 @@
<PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Routing.Abstractions" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Localization" Version="2.1.0" />
</ItemGroup>

10
framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs

@ -1,5 +1,4 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Auditing;
using Volo.Abp.Auditing;
@ -30,6 +29,11 @@ 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 =>
@ -39,10 +43,6 @@ namespace Volo.Abp.AspNetCore
AddAspNetServices(context.Services);
context.Services.AddObjectAccessor<IApplicationBuilder>();
context.Services.AddConfiguration(
context.Services.ExecutePreConfiguredActions<AbpAspNetCoreConfigurationOptions>()
);
}
private static void AddAspNetServices(IServiceCollection services)

14
framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/Configuration/AbpAspNetCoreConfigurationOptions.cs → framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationBuilderOptions.cs

@ -2,7 +2,7 @@
namespace Microsoft.Extensions.Configuration
{
public class AbpAspNetCoreConfigurationOptions
public class ConfigurationBuilderOptions
{
/// <summary>
/// Used to set assembly which is used to get the user secret id for the application.
@ -20,5 +20,15 @@ namespace Microsoft.Extensions.Configuration
/// Default value: "appsettings".
/// </summary>
public string FileName { get; set; } = "appsettings";
/// <summary>
/// Environment name. Generally used "Development", "Staging" or "Production".
/// </summary>
public string EnvironmentName { get; set; }
/// <summary>
/// Base path to read the configuration file indicated by <see cref="FileName"/>.
/// </summary>
public string BasePath { get; set; }
}
}
}

43
framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs

@ -0,0 +1,43 @@
using System;
using System.IO;
namespace Microsoft.Extensions.Configuration
{
public static class ConfigurationHelper
{
public static IConfigurationRoot BuildConfiguration(ConfigurationBuilderOptions options = null)
{
options = options ?? new ConfigurationBuilderOptions();
if (options.BasePath.IsNullOrEmpty())
{
options.BasePath = Directory.GetCurrentDirectory();
}
var builder = new ConfigurationBuilder()
.SetBasePath(options.BasePath)
.AddJsonFile(options.FileName + ".json", optional: true, reloadOnChange: true);
if (!options.EnvironmentName.IsNullOrEmpty())
{
builder = builder.AddJsonFile($"{options.FileName}.{options.EnvironmentName}.json", optional: true, reloadOnChange: true);
}
builder = builder.AddEnvironmentVariables();
if (options.EnvironmentName == "Development")
{
if (options.UserSecretsId != null)
{
builder.AddUserSecrets(options.UserSecretsId);
}
else if (options.UserSecretsAssembly != null)
{
builder.AddUserSecrets(options.UserSecretsAssembly, true);
}
}
return builder.Build();
}
}
}

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

@ -18,6 +18,8 @@
<PackageReference Include="System.Linq.Queryable" Version="4.3.0" />
<PackageReference Include="Microsoft.Extensions.Localization" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.1.0" />

2
framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs

@ -39,7 +39,7 @@ namespace Volo.Abp
services.AddSingleton<IModuleContainer>(this);
services.AddCoreServices();
services.AddCoreAbpServices(this);
services.AddCoreAbpServices(this, options);
Modules = LoadModules(services, options);
}

5
framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationCreationOptions.cs

@ -1,4 +1,5 @@
using JetBrains.Annotations;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity.PlugIns;
@ -12,10 +13,14 @@ namespace Volo.Abp
[NotNull]
public PlugInSourceList PlugInSources { get; }
[NotNull]
public ConfigurationBuilderOptions Configuration {get; }
public AbpApplicationCreationOptions([NotNull] IServiceCollection services)
{
Services = Check.NotNull(services, nameof(services));
PlugInSources = new PlugInSourceList();
Configuration = new ConfigurationBuilderOptions();
}
}
}

13
framework/src/Volo.Abp.Core/Volo/Abp/Internal/InternalServiceCollectionExtensions.cs

@ -16,13 +16,22 @@ namespace Volo.Abp.Internal
services.AddLocalization();
}
internal static void AddCoreAbpServices(this IServiceCollection services, IAbpApplication abpApplication)
internal static void AddCoreAbpServices(this IServiceCollection services,
IAbpApplication abpApplication,
AbpApplicationCreationOptions applicationCreationOptions)
{
var moduleLoader = new ModuleLoader();
var assemblyFinder = new AssemblyFinder(abpApplication);
var typeFinder = new TypeFinder(assemblyFinder);
services.TryAddSingleton<IConfigurationAccessor>(DefaultConfigurationAccessor.Empty);
services.TryAddSingleton<IConfigurationAccessor>(
new DefaultConfigurationAccessor(
ConfigurationHelper.BuildConfiguration(
applicationCreationOptions.Configuration
)
)
);
services.TryAddSingleton<IModuleLoader>(moduleLoader);
services.TryAddSingleton<IAssemblyFinder>(assemblyFinder);
services.TryAddSingleton<ITypeFinder>(typeFinder);

4
framework/src/Volo.Abp.Data/Volo/Abp/Data/AbpDataModule.cs

@ -7,6 +7,10 @@ namespace Volo.Abp.Data
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
Configure<DbConnectionOptions>(configuration);
context.Services.AddSingleton(typeof(IDataFilter<>), typeof(DataFilter<>));
}
}

8
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs

@ -1,4 +1,5 @@
using Volo.Abp.Castle;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Castle;
using Volo.Abp.Modularity;
namespace Volo.Abp.Http.Client
@ -7,6 +8,11 @@ namespace Volo.Abp.Http.Client
[DependsOn(typeof(AbpCastleCoreModule))]
public class AbpHttpClientModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
Configure<RemoteServiceOptions>(configuration);
}
}
}

2
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs

@ -126,7 +126,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying
var accessToken = await _accessTokenProvider.GetOrNullAsync();
if (accessToken != null)
{
//TODO: "Bearer" should not by static.
//TODO: "Bearer" should not be static.
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
}

Loading…
Cancel
Save