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 namespace Microsoft.AspNetCore.Hosting
{ {
public static class AbpHostingEnvironmentExtensions 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() if (options.BasePath.IsNullOrEmpty())
.SetBasePath(env.ContentRootPath) {
.AddJsonFile(options.FileName + ".json", optional: true, reloadOnChange: true) options.BasePath = env.ContentRootPath;
.AddJsonFile($"{options.FileName}.{env.EnvironmentName}.json", optional: true, reloadOnChange: true) }
.AddEnvironmentVariables();
if (env.IsDevelopment()) if (options.EnvironmentName.IsNullOrEmpty())
{ {
if (options.UserSecretsId != null) options.EnvironmentName = env.EnvironmentName;
{
builder.AddUserSecrets(options.UserSecretsId);
}
else if (options.UserSecretsAssembly != null)
{
builder.AddUserSecrets(options.UserSecretsAssembly, true);
}
} }
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>(); 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); 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); var configuration = services.BuildConfiguration(options);
services.SetConfiguration(configuration); 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.Hosting.Abstractions" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Routing.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.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.StaticFiles" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Localization" Version="2.1.0" /> <PackageReference Include="Microsoft.AspNetCore.Localization" Version="2.1.0" />
</ItemGroup> </ItemGroup>

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

@ -1,5 +1,4 @@
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Auditing; using Volo.Abp.AspNetCore.Auditing;
using Volo.Abp.Auditing; using Volo.Abp.Auditing;
@ -30,6 +29,11 @@ namespace Volo.Abp.AspNetCore
)] )]
public class AbpAspNetCoreModule : AbpModule public class AbpAspNetCoreModule : AbpModule
{ {
public override void PreConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddConfiguration();
}
public override void ConfigureServices(ServiceConfigurationContext context) public override void ConfigureServices(ServiceConfigurationContext context)
{ {
Configure<AbpAuditingOptions>(options => Configure<AbpAuditingOptions>(options =>
@ -39,10 +43,6 @@ namespace Volo.Abp.AspNetCore
AddAspNetServices(context.Services); AddAspNetServices(context.Services);
context.Services.AddObjectAccessor<IApplicationBuilder>(); context.Services.AddObjectAccessor<IApplicationBuilder>();
context.Services.AddConfiguration(
context.Services.ExecutePreConfiguredActions<AbpAspNetCoreConfigurationOptions>()
);
} }
private static void AddAspNetServices(IServiceCollection services) 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 namespace Microsoft.Extensions.Configuration
{ {
public class AbpAspNetCoreConfigurationOptions public class ConfigurationBuilderOptions
{ {
/// <summary> /// <summary>
/// Used to set assembly which is used to get the user secret id for the application. /// 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". /// Default value: "appsettings".
/// </summary> /// </summary>
public string FileName { get; set; } = "appsettings"; 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="System.Linq.Queryable" Version="4.3.0" />
<PackageReference Include="Microsoft.Extensions.Localization" Version="2.1.0" /> <PackageReference Include="Microsoft.Extensions.Localization" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" 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" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.1.0" /> <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Logging" 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.AddSingleton<IModuleContainer>(this);
services.AddCoreServices(); services.AddCoreServices();
services.AddCoreAbpServices(this); services.AddCoreAbpServices(this, options);
Modules = LoadModules(services, options); Modules = LoadModules(services, options);
} }

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

@ -1,4 +1,5 @@
using JetBrains.Annotations; using JetBrains.Annotations;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity.PlugIns; using Volo.Abp.Modularity.PlugIns;
@ -12,10 +13,14 @@ namespace Volo.Abp
[NotNull] [NotNull]
public PlugInSourceList PlugInSources { get; } public PlugInSourceList PlugInSources { get; }
[NotNull]
public ConfigurationBuilderOptions Configuration {get; }
public AbpApplicationCreationOptions([NotNull] IServiceCollection services) public AbpApplicationCreationOptions([NotNull] IServiceCollection services)
{ {
Services = Check.NotNull(services, nameof(services)); Services = Check.NotNull(services, nameof(services));
PlugInSources = new PlugInSourceList(); 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(); 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 moduleLoader = new ModuleLoader();
var assemblyFinder = new AssemblyFinder(abpApplication); var assemblyFinder = new AssemblyFinder(abpApplication);
var typeFinder = new TypeFinder(assemblyFinder); 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<IModuleLoader>(moduleLoader);
services.TryAddSingleton<IAssemblyFinder>(assemblyFinder); services.TryAddSingleton<IAssemblyFinder>(assemblyFinder);
services.TryAddSingleton<ITypeFinder>(typeFinder); 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) public override void ConfigureServices(ServiceConfigurationContext context)
{ {
var configuration = context.Services.GetConfiguration();
Configure<DbConnectionOptions>(configuration);
context.Services.AddSingleton(typeof(IDataFilter<>), typeof(DataFilter<>)); 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; using Volo.Abp.Modularity;
namespace Volo.Abp.Http.Client namespace Volo.Abp.Http.Client
@ -7,6 +8,11 @@ namespace Volo.Abp.Http.Client
[DependsOn(typeof(AbpCastleCoreModule))] [DependsOn(typeof(AbpCastleCoreModule))]
public class AbpHttpClientModule : AbpModule 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(); var accessToken = await _accessTokenProvider.GetOrNullAsync();
if (accessToken != null) if (accessToken != null)
{ {
//TODO: "Bearer" should not by static. //TODO: "Bearer" should not be static.
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
} }

Loading…
Cancel
Save