diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerConfigurationProviderExtensions.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerConfigurationProviderExtensions.cs new file mode 100644 index 0000000000..a199d8a72f --- /dev/null +++ b/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( + this IBlobContainerConfigurationProvider configurationProvider) + { + return configurationProvider.Get(BlobContainerNameAttribute.GetContainerName()); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs index 33b511fa55..dd56035d09 100644 --- a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs +++ b/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 BlobProviders { get; } + + protected IBlobContainerConfigurationProvider ConfigurationProvider { get; } protected ICurrentTenant CurrentTenant { get; } protected ICancellationTokenProvider CancellationTokenProvider { get; } public BlobContainerFactory( - IOptions options, IEnumerable 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, diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/DefaultBlobContainerConfigurationProvider.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/DefaultBlobContainerConfigurationProvider.cs new file mode 100644 index 0000000000..a30d584c9d --- /dev/null +++ b/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 options) + { + Options = options.Value; + } + + public virtual BlobContainerConfiguration Get(string name) + { + return Options.Containers.GetConfiguration(name); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobContainerConfigurationProvider.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobContainerConfigurationProvider.cs new file mode 100644 index 0000000000..f984a903a2 --- /dev/null +++ b/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); + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/AbpBlobStoringOptions_Tests.cs b/framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/AbpBlobStoringOptions_Tests.cs index 84193664fd..53c7c2079d 100644 --- a/framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/AbpBlobStoringOptions_Tests.cs +++ b/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>().Value; + _configurationProvider = GetRequiredService(); } [Fact] public void Should_Property_Set_And_Get_Options_For_Different_Containers() { - var testContainer1Config = _options.Containers - .GetConfiguration(BlobContainerNameAttribute.GetContainerName()); + var testContainer1Config = _configurationProvider.Get(); testContainer1Config.ProviderType.ShouldBe(typeof(FakeBlobProvider1)); testContainer1Config.GetConfigurationOrDefault("TestConfig1").ShouldBe("TestValue1"); testContainer1Config.GetConfigurationOrDefault("TestConfigDefault").ShouldBe("TestValueDefault"); - var testContainer2Config = _options.Containers - .GetConfiguration(BlobContainerNameAttribute.GetContainerName()); + var testContainer2Config = _configurationProvider.Get(); 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()); + var config = _configurationProvider.Get(); config.ProviderType.ShouldBe(typeof(FakeBlobProvider1)); config.GetConfigurationOrNull("TestConfigDefault").ShouldBe("TestValueDefault"); }