Browse Source

Created IConfigurationAccessor and add configuration by default.

pull/301/head
Halil ibrahim Kalkan 8 years ago
parent
commit
1cb00b6662
  1. 2
      src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Hosting/AbpHostingEnvironmentExtensions.cs
  2. 7
      src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs
  3. 5
      src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs
  4. 19
      src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionConfigurationExtensions.cs
  5. 23
      src/Volo.Abp.Core/Volo/Abp/Configuration/DefaultConfigurationAccessor.cs
  6. 9
      src/Volo.Abp.Core/Volo/Abp/Configuration/IConfigurationAccessor.cs
  7. 5
      src/Volo.Abp.Core/Volo/Abp/Internal/InternalServiceCollectionExtensions.cs
  8. 52
      test/Volo.Abp.Core.Tests/Volo/Abp/Configuration/ConfigurationAccessor_Tests.cs

2
src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Hosting/AbpHostingEnvironmentExtensions.cs

@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Hosting
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile(fileName + ".json", optional: false, reloadOnChange: true)
.AddJsonFile(fileName + ".json", optional: true, reloadOnChange: true)
.AddJsonFile($"{fileName}.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
return builder.Build();

7
src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs

@ -14,5 +14,12 @@ namespace Microsoft.Extensions.DependencyInjection
{
return services.GetHostingEnvironment().BuildConfiguration(fileName);
}
public static IConfigurationRoot AddConfiguration(this IServiceCollection services, string fileName = "appsettings")
{
var configuration = services.BuildConfiguration(fileName);
services.AddConfiguration(configuration);
return configuration;
}
}
}

5
src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs

@ -1,7 +1,5 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Volo.Abp.Modularity;
using Volo.Abp.Security;
using Volo.Abp.Threading;
@ -19,6 +17,9 @@ namespace Volo.Abp.AspNetCore
AddAspNetServices(services);
services.AddObjectAccessor<IApplicationBuilder>();
services.AddConfiguration();
services.AddAssemblyOf<AbpAspNetCoreModule>();
}

19
src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionConfigurationExtensions.cs

@ -0,0 +1,19 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Volo.Abp.Configuration;
namespace Microsoft.Extensions.DependencyInjection
{
public static class ServiceCollectionConfigurationExtensions
{
public static IServiceCollection AddConfiguration(this IServiceCollection services, IConfigurationRoot configurationRoot)
{
return services.Replace(ServiceDescriptor.Singleton<IConfigurationAccessor>(new DefaultConfigurationAccessor(configurationRoot)));
}
public static IConfigurationRoot GetConfiguration(this IServiceCollection services)
{
return services.GetSingletonInstance<IConfigurationAccessor>().Configuration;
}
}
}

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

@ -0,0 +1,23 @@
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;
}
}
}

9
src/Volo.Abp.Core/Volo/Abp/Configuration/IConfigurationAccessor.cs

@ -0,0 +1,9 @@
using Microsoft.Extensions.Configuration;
namespace Volo.Abp.Configuration
{
public interface IConfigurationAccessor
{
IConfigurationRoot Configuration { get; }
}
}

5
src/Volo.Abp.Core/Volo/Abp/Internal/InternalServiceCollectionExtensions.cs

@ -1,5 +1,7 @@
using Microsoft.Extensions.DependencyInjection;
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;
@ -20,6 +22,7 @@ namespace Volo.Abp.Internal
var assemblyFinder = new AssemblyFinder(abpApplication);
var typeFinder = new TypeFinder(assemblyFinder);
services.TryAddSingleton<IConfigurationAccessor>(DefaultConfigurationAccessor.Empty);
services.TryAddSingleton<IModuleLoader>(moduleLoader);
services.TryAddSingleton<IAssemblyFinder>(assemblyFinder);
services.TryAddSingleton<ITypeFinder>(typeFinder);

52
test/Volo.Abp.Core.Tests/Volo/Abp/Configuration/ConfigurationAccessor_Tests.cs

@ -0,0 +1,52 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Shouldly;
using Volo.Abp.Modularity;
using Xunit;
namespace Volo.Abp.Configuration
{
public class ConfigurationAccessor_Tests
{
[Fact]
public void Should_Use_Empty_ConfigurationRoot_By_Default()
{
using (var application = AbpApplicationFactory.Create<IndependentEmptyModule>())
{
var configuration1 = application.Services.GetConfiguration();
configuration1.ShouldNotBeNull();
application.Initialize();
var configuration2 = ResolveConfiguration(application);
configuration2.ShouldBe(configuration1);
}
}
[Fact]
public void Should_Use_The_Registered_ConfigurationRoot()
{
using (var application = AbpApplicationFactory.Create<IndependentEmptyModule>())
{
var myConfiguration = new ConfigurationBuilder().Build();
application.Services.AddConfiguration(myConfiguration);
application.Services.GetConfiguration().ShouldBe(myConfiguration);
application.Initialize();
var configuration = ResolveConfiguration(application);
configuration.ShouldBe(myConfiguration);
}
}
private static IConfigurationRoot ResolveConfiguration(IAbpApplication application)
{
return application
.ServiceProvider
.GetRequiredService<IConfigurationAccessor>()
.Configuration;
}
}
}
Loading…
Cancel
Save