Browse Source

Extract DefaultBlobContainerConfigurationProvider to allow to customize getting the configuration.

pull/4105/head
Halil İbrahim Kalkan 6 years ago
parent
commit
2df975c90a
  1. 11
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerConfigurationProviderExtensions.cs
  2. 11
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs
  3. 20
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/DefaultBlobContainerConfigurationProvider.cs
  4. 7
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobContainerConfigurationProvider.cs
  5. 13
      framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/AbpBlobStoringOptions_Tests.cs

11
framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerConfigurationProviderExtensions.cs

@ -0,0 +1,11 @@
namespace Volo.Abp.BlobStoring
{
public static class BlobContainerConfigurationProviderExtensions
{
public static BlobContainerConfiguration Get<TContainer>(
this IBlobContainerConfigurationProvider configurationProvider)
{
return configurationProvider.Get(BlobContainerNameAttribute.GetContainerName<TContainer>());
}
}
}

11
framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs

@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using JetBrains.Annotations; using JetBrains.Annotations;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.DynamicProxy; using Volo.Abp.DynamicProxy;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
@ -13,29 +12,29 @@ namespace Volo.Abp.BlobStoring
{ {
public class BlobContainerFactory : IBlobContainerFactory, ITransientDependency public class BlobContainerFactory : IBlobContainerFactory, ITransientDependency
{ {
protected AbpBlobStoringOptions Options { get; }
protected IEnumerable<IBlobProvider> BlobProviders { get; } protected IEnumerable<IBlobProvider> BlobProviders { get; }
protected IBlobContainerConfigurationProvider ConfigurationProvider { get; }
protected ICurrentTenant CurrentTenant { get; } protected ICurrentTenant CurrentTenant { get; }
protected ICancellationTokenProvider CancellationTokenProvider { get; } protected ICancellationTokenProvider CancellationTokenProvider { get; }
public BlobContainerFactory( public BlobContainerFactory(
IOptions<AbpBlobStoringOptions> options,
IEnumerable<IBlobProvider> blobProviders, IEnumerable<IBlobProvider> blobProviders,
IBlobContainerConfigurationProvider configurationProvider,
ICurrentTenant currentTenant, ICurrentTenant currentTenant,
ICancellationTokenProvider cancellationTokenProvider) ICancellationTokenProvider cancellationTokenProvider)
{ {
Options = options.Value;
BlobProviders = blobProviders; BlobProviders = blobProviders;
ConfigurationProvider = configurationProvider;
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
CancellationTokenProvider = cancellationTokenProvider; CancellationTokenProvider = cancellationTokenProvider;
} }
public virtual IBlobContainer Create(string name, CancellationToken cancellationToken = default) public virtual IBlobContainer Create(string name, CancellationToken cancellationToken = default)
{ {
var configuration = Options.Containers.GetConfiguration(name); var configuration = ConfigurationProvider.Get(name);
return new BlobContainer( return new BlobContainer(
name, name,
configuration, configuration,

20
framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/DefaultBlobContainerConfigurationProvider.cs

@ -0,0 +1,20 @@
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.BlobStoring
{
public class DefaultBlobContainerConfigurationProvider : IBlobContainerConfigurationProvider, ITransientDependency
{
protected AbpBlobStoringOptions Options { get; }
public DefaultBlobContainerConfigurationProvider(IOptions<AbpBlobStoringOptions> options)
{
Options = options.Value;
}
public virtual BlobContainerConfiguration Get(string name)
{
return Options.Containers.GetConfiguration(name);
}
}
}

7
framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobContainerConfigurationProvider.cs

@ -0,0 +1,7 @@
namespace Volo.Abp.BlobStoring
{
public interface IBlobContainerConfigurationProvider
{
BlobContainerConfiguration Get(string name);
}
}

13
framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/AbpBlobStoringOptions_Tests.cs

@ -9,24 +9,22 @@ namespace Volo.Abp.BlobStoring
{ {
public class AbpBlobStoringOptions_Tests : AbpBlobStoringTestBase public class AbpBlobStoringOptions_Tests : AbpBlobStoringTestBase
{ {
private readonly AbpBlobStoringOptions _options; private readonly IBlobContainerConfigurationProvider _configurationProvider;
public AbpBlobStoringOptions_Tests() public AbpBlobStoringOptions_Tests()
{ {
_options = GetRequiredService<IOptions<AbpBlobStoringOptions>>().Value; _configurationProvider = GetRequiredService<IBlobContainerConfigurationProvider>();
} }
[Fact] [Fact]
public void Should_Property_Set_And_Get_Options_For_Different_Containers() public void Should_Property_Set_And_Get_Options_For_Different_Containers()
{ {
var testContainer1Config = _options.Containers var testContainer1Config = _configurationProvider.Get<TestContainer1>();
.GetConfiguration(BlobContainerNameAttribute.GetContainerName<TestContainer1>());
testContainer1Config.ProviderType.ShouldBe(typeof(FakeBlobProvider1)); testContainer1Config.ProviderType.ShouldBe(typeof(FakeBlobProvider1));
testContainer1Config.GetConfigurationOrDefault<string>("TestConfig1").ShouldBe("TestValue1"); testContainer1Config.GetConfigurationOrDefault<string>("TestConfig1").ShouldBe("TestValue1");
testContainer1Config.GetConfigurationOrDefault<string>("TestConfigDefault").ShouldBe("TestValueDefault"); testContainer1Config.GetConfigurationOrDefault<string>("TestConfigDefault").ShouldBe("TestValueDefault");
var testContainer2Config = _options.Containers var testContainer2Config = _configurationProvider.Get<TestContainer2>();
.GetConfiguration(BlobContainerNameAttribute.GetContainerName<TestContainer2>());
testContainer2Config.ProviderType.ShouldBe(typeof(FakeBlobProvider2)); testContainer2Config.ProviderType.ShouldBe(typeof(FakeBlobProvider2));
testContainer2Config.GetConfigurationOrNull("TestConfig2").ShouldBe("TestValue2"); testContainer2Config.GetConfigurationOrNull("TestConfig2").ShouldBe("TestValue2");
testContainer2Config.GetConfigurationOrNull("TestConfigDefault").ShouldBe("TestValueDefault"); testContainer2Config.GetConfigurationOrNull("TestConfigDefault").ShouldBe("TestValueDefault");
@ -35,8 +33,7 @@ namespace Volo.Abp.BlobStoring
[Fact] [Fact]
public void Should_Fallback_To_Default_Configuration_If_Not_Specialized() public void Should_Fallback_To_Default_Configuration_If_Not_Specialized()
{ {
var config = _options.Containers var config = _configurationProvider.Get<TestContainer3>();
.GetConfiguration(BlobContainerNameAttribute.GetContainerName<TestContainer3>());
config.ProviderType.ShouldBe(typeof(FakeBlobProvider1)); config.ProviderType.ShouldBe(typeof(FakeBlobProvider1));
config.GetConfigurationOrNull("TestConfigDefault").ShouldBe("TestValueDefault"); config.GetConfigurationOrNull("TestConfigDefault").ShouldBe("TestValueDefault");
} }

Loading…
Cancel
Save