Browse Source

Merge pull request #25619 from abpframework/auto-merge/rel-10-4/4647

Merge branch rel-10.5 with rel-10.4
pull/25620/head
Volosoft Agent 4 months ago
committed by GitHub
parent
commit
cbc1a7574b
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 22
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerConfiguration.cs
  2. 16
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNamingService.cs
  3. 14
      framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/AbpBlobStoringOptions_Tests.cs
  4. 4
      framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/AbpBlobStoringTestModule.cs
  5. 62
      framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/BlobContainerConfiguration_Tests.cs
  6. 14
      framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/Fakes/AnotherFakeNamingNormalizer.cs
  7. 14
      framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/Fakes/FakeNamingNormalizer.cs

22
framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerConfiguration.cs

@ -7,10 +7,16 @@ namespace Volo.Abp.BlobStoring;
public class BlobContainerConfiguration public class BlobContainerConfiguration
{ {
private Type? _providerType;
/// <summary> /// <summary>
/// The provider to be used to store BLOBs of this container. /// The provider to be used to store BLOBs of this container.
/// </summary> /// </summary>
public Type? ProviderType { get; set; } public Type? ProviderType
{
get => _providerType ?? _fallbackConfiguration?.ProviderType;
set => _providerType = value;
}
/// <summary> /// <summary>
/// Indicates whether this container is multi-tenant or not. /// Indicates whether this container is multi-tenant or not.
@ -37,6 +43,20 @@ public class BlobContainerConfiguration
_properties = new Dictionary<string, object?>(); _properties = new Dictionary<string, object?>();
} }
/// <summary>
/// Returns the naming normalizers in effect for this container, inheriting from the fallback
/// configuration only when this container has none and does not override <see cref="ProviderType"/>.
/// </summary>
public IEnumerable<Type> GetEffectiveNamingNormalizers()
{
if (NamingNormalizers.Count == 0 && _providerType == null && _fallbackConfiguration != null)
{
return _fallbackConfiguration.GetEffectiveNamingNormalizers();
}
return NamingNormalizers;
}
public T? GetConfigurationOrDefault<T>(string name, T? defaultValue = default) public T? GetConfigurationOrDefault<T>(string name, T? defaultValue = default)
{ {
return (T?)GetConfigurationOrNull(name, defaultValue); return (T?)GetConfigurationOrNull(name, defaultValue);

16
framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNamingService.cs

@ -19,15 +19,15 @@ public class BlobNormalizeNamingService : IBlobNormalizeNamingService, ITransien
string? containerName, string? containerName,
string? blobName) string? blobName)
{ {
var normalizerTypes = configuration.GetEffectiveNamingNormalizers();
if (!configuration.NamingNormalizers.Any()) if (!normalizerTypes.Any())
{ {
return new BlobNormalizeNaming(containerName, blobName); return new BlobNormalizeNaming(containerName, blobName);
} }
using (var scope = ServiceProvider.CreateScope()) using (var scope = ServiceProvider.CreateScope())
{ {
foreach (var normalizerType in configuration.NamingNormalizers) foreach (var normalizerType in normalizerTypes)
{ {
var normalizer = scope.ServiceProvider var normalizer = scope.ServiceProvider
.GetRequiredService(normalizerType) .GetRequiredService(normalizerType)
@ -43,21 +43,11 @@ public class BlobNormalizeNamingService : IBlobNormalizeNamingService, ITransien
public string NormalizeContainerName(BlobContainerConfiguration configuration, string containerName) public string NormalizeContainerName(BlobContainerConfiguration configuration, string containerName)
{ {
if (!configuration.NamingNormalizers.Any())
{
return containerName;
}
return NormalizeNaming(configuration, containerName, null).ContainerName!; return NormalizeNaming(configuration, containerName, null).ContainerName!;
} }
public string NormalizeBlobName(BlobContainerConfiguration configuration, string blobName) public string NormalizeBlobName(BlobContainerConfiguration configuration, string blobName)
{ {
if (!configuration.NamingNormalizers.Any())
{
return blobName;
}
return NormalizeNaming(configuration, null, blobName).BlobName!; return NormalizeNaming(configuration, null, blobName).BlobName!;
} }
} }

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

@ -29,10 +29,22 @@ public class AbpBlobStoringOptions_Tests : AbpBlobStoringTestBase
} }
[Fact] [Fact]
public void Should_Fallback_To_Default_Configuration_If_Not_Specialized() public void Should_Fallback_To_Default_ProviderType_When_Not_Explicitly_Configured()
{ {
var config = _configurationProvider.Get<TestContainer3>(); var config = _configurationProvider.Get<TestContainer3>();
config.ProviderType.ShouldBe(typeof(FakeBlobProvider1)); config.ProviderType.ShouldBe(typeof(FakeBlobProvider1));
config.IsMultiTenant.ShouldBeFalse();
config.GetConfigurationOrNull("TestConfigDefault").ShouldBe("TestValueDefault"); config.GetConfigurationOrNull("TestConfigDefault").ShouldBe("TestValueDefault");
} }
[Fact]
public void Should_Resolve_Fallback_Chain_Through_Configuration_Provider()
{
var testContainer1Config = _configurationProvider.Get<TestContainer1>();
testContainer1Config.IsMultiTenant.ShouldBeTrue();
var testContainer3Config = _configurationProvider.Get<TestContainer3>();
testContainer3Config.IsMultiTenant.ShouldBeFalse();
testContainer3Config.ProviderType.ShouldBe(typeof(FakeBlobProvider1));
}
} }

4
framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/AbpBlobStoringTestModule.cs

@ -36,6 +36,10 @@ public class AbpBlobStoringTestModule : AbpModule
{ {
container.SetConfiguration("TestConfig2", "TestValue2"); container.SetConfiguration("TestConfig2", "TestValue2");
container.ProviderType = typeof(FakeBlobProvider2); container.ProviderType = typeof(FakeBlobProvider2);
})
.Configure<TestContainer3>(container =>
{
container.IsMultiTenant = false;
}); });
}); });
} }

62
framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/BlobContainerConfiguration_Tests.cs

@ -0,0 +1,62 @@
using System.Linq;
using Shouldly;
using Volo.Abp.BlobStoring.Fakes;
using Xunit;
namespace Volo.Abp.BlobStoring;
public class BlobContainerConfiguration_Tests
{
[Fact]
public void Should_Override_Default_Container_ProviderType_When_Named_Container_Has_Its_Own()
{
var defaultConfig = new BlobContainerConfiguration();
defaultConfig.ProviderType = typeof(FakeBlobProvider1);
var namedConfig = new BlobContainerConfiguration(defaultConfig);
namedConfig.ProviderType = typeof(FakeBlobProvider2);
namedConfig.ProviderType.ShouldBe(typeof(FakeBlobProvider2));
defaultConfig.ProviderType.ShouldBe(typeof(FakeBlobProvider1));
}
[Fact]
public void Should_Inherit_Default_Container_NamingNormalizers_When_Provider_Also_Inherited()
{
var defaultConfig = new BlobContainerConfiguration();
defaultConfig.ProviderType = typeof(FakeBlobProvider1);
defaultConfig.NamingNormalizers.Add<FakeNamingNormalizer>();
var namedConfig = new BlobContainerConfiguration(defaultConfig);
namedConfig.GetEffectiveNamingNormalizers().ShouldContain(typeof(FakeNamingNormalizer));
namedConfig.NamingNormalizers.ShouldBeEmpty();
}
[Fact]
public void Should_Not_Inherit_NamingNormalizers_When_Named_Container_Has_Its_Own_ProviderType()
{
var defaultConfig = new BlobContainerConfiguration();
defaultConfig.ProviderType = typeof(FakeBlobProvider1);
defaultConfig.NamingNormalizers.Add<FakeNamingNormalizer>();
var namedConfig = new BlobContainerConfiguration(defaultConfig);
namedConfig.ProviderType = typeof(FakeBlobProvider2);
namedConfig.GetEffectiveNamingNormalizers().ShouldBeEmpty();
}
[Fact]
public void Should_Override_Default_Container_NamingNormalizers_When_Named_Container_Has_Its_Own()
{
var defaultConfig = new BlobContainerConfiguration();
defaultConfig.NamingNormalizers.Add<FakeNamingNormalizer>();
var namedConfig = new BlobContainerConfiguration(defaultConfig);
namedConfig.NamingNormalizers.Add<AnotherFakeNamingNormalizer>();
var effective = namedConfig.GetEffectiveNamingNormalizers().ToList();
effective.ShouldContain(typeof(AnotherFakeNamingNormalizer));
effective.ShouldNotContain(typeof(FakeNamingNormalizer));
}
}

14
framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/Fakes/AnotherFakeNamingNormalizer.cs

@ -0,0 +1,14 @@
namespace Volo.Abp.BlobStoring.Fakes;
public class AnotherFakeNamingNormalizer : IBlobNamingNormalizer
{
public string NormalizeContainerName(string containerName)
{
return containerName;
}
public string NormalizeBlobName(string blobName)
{
return blobName;
}
}

14
framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/Fakes/FakeNamingNormalizer.cs

@ -0,0 +1,14 @@
namespace Volo.Abp.BlobStoring.Fakes;
public class FakeNamingNormalizer : IBlobNamingNormalizer
{
public string NormalizeContainerName(string containerName)
{
return containerName;
}
public string NormalizeBlobName(string blobName)
{
return blobName;
}
}
Loading…
Cancel
Save