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.Threading;
using JetBrains.Annotations;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
using Volo.Abp.DynamicProxy;
using Volo.Abp.MultiTenancy;
@ -13,29 +12,29 @@ namespace Volo.Abp.BlobStoring
{
public class BlobContainerFactory : IBlobContainerFactory, ITransientDependency
{
protected AbpBlobStoringOptions Options { get; }
protected IEnumerable<IBlobProvider> BlobProviders { get; }
protected IBlobContainerConfigurationProvider ConfigurationProvider { get; }
protected ICurrentTenant CurrentTenant { get; }
protected ICancellationTokenProvider CancellationTokenProvider { get; }
public BlobContainerFactory(
IOptions<AbpBlobStoringOptions> options,
IEnumerable<IBlobProvider> blobProviders,
IBlobContainerConfigurationProvider configurationProvider,
ICurrentTenant currentTenant,
ICancellationTokenProvider cancellationTokenProvider)
{
Options = options.Value;
BlobProviders = blobProviders;
ConfigurationProvider = configurationProvider;
CurrentTenant = currentTenant;
CancellationTokenProvider = cancellationTokenProvider;
}
public virtual IBlobContainer Create(string name, CancellationToken cancellationToken = default)
{
var configuration = Options.Containers.GetConfiguration(name);
var configuration = ConfigurationProvider.Get(name);
return new BlobContainer(
name,
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
{
private readonly AbpBlobStoringOptions _options;
private readonly IBlobContainerConfigurationProvider _configurationProvider;
public AbpBlobStoringOptions_Tests()
{
_options = GetRequiredService<IOptions<AbpBlobStoringOptions>>().Value;
_configurationProvider = GetRequiredService<IBlobContainerConfigurationProvider>();
}
[Fact]
public void Should_Property_Set_And_Get_Options_For_Different_Containers()
{
var testContainer1Config = _options.Containers
.GetConfiguration(BlobContainerNameAttribute.GetContainerName<TestContainer1>());
var testContainer1Config = _configurationProvider.Get<TestContainer1>();
testContainer1Config.ProviderType.ShouldBe(typeof(FakeBlobProvider1));
testContainer1Config.GetConfigurationOrDefault<string>("TestConfig1").ShouldBe("TestValue1");
testContainer1Config.GetConfigurationOrDefault<string>("TestConfigDefault").ShouldBe("TestValueDefault");
var testContainer2Config = _options.Containers
.GetConfiguration(BlobContainerNameAttribute.GetContainerName<TestContainer2>());
var testContainer2Config = _configurationProvider.Get<TestContainer2>();
testContainer2Config.ProviderType.ShouldBe(typeof(FakeBlobProvider2));
testContainer2Config.GetConfigurationOrNull("TestConfig2").ShouldBe("TestValue2");
testContainer2Config.GetConfigurationOrNull("TestConfigDefault").ShouldBe("TestValueDefault");
@ -35,8 +33,7 @@ namespace Volo.Abp.BlobStoring
[Fact]
public void Should_Fallback_To_Default_Configuration_If_Not_Specialized()
{
var config = _options.Containers
.GetConfiguration(BlobContainerNameAttribute.GetContainerName<TestContainer3>());
var config = _configurationProvider.Get<TestContainer3>();
config.ProviderType.ShouldBe(typeof(FakeBlobProvider1));
config.GetConfigurationOrNull("TestConfigDefault").ShouldBe("TestValueDefault");
}

Loading…
Cancel
Save