mirror of https://github.com/abpframework/abp.git
8 changed files with 118 additions and 4 deletions
@ -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; |
|||
} |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
using Microsoft.Extensions.Configuration; |
|||
|
|||
namespace Volo.Abp.Configuration |
|||
{ |
|||
public interface IConfigurationAccessor |
|||
{ |
|||
IConfigurationRoot Configuration { get; } |
|||
} |
|||
} |
|||
@ -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…
Reference in new issue