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
{
private Type? _providerType;
/// <summary>
/// The provider to be used to store BLOBs of this container.
/// </summary>
public Type? ProviderType { get; set; }
public Type? ProviderType
{
get => _providerType ?? _fallbackConfiguration?.ProviderType;
set => _providerType = value;
}
/// <summary>
/// Indicates whether this container is multi-tenant or not.
@ -37,6 +43,20 @@ public class BlobContainerConfiguration
_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)
{
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? blobName)
{
if (!configuration.NamingNormalizers.Any())
var normalizerTypes = configuration.GetEffectiveNamingNormalizers();
if (!normalizerTypes.Any())
{
return new BlobNormalizeNaming(containerName, blobName);
}
using (var scope = ServiceProvider.CreateScope())
{
foreach (var normalizerType in configuration.NamingNormalizers)
foreach (var normalizerType in normalizerTypes)
{
var normalizer = scope.ServiceProvider
.GetRequiredService(normalizerType)
@ -43,21 +43,11 @@ public class BlobNormalizeNamingService : IBlobNormalizeNamingService, ITransien
public string NormalizeContainerName(BlobContainerConfiguration configuration, string containerName)
{
if (!configuration.NamingNormalizers.Any())
{
return containerName;
}
return NormalizeNaming(configuration, containerName, null).ContainerName!;
}
public string NormalizeBlobName(BlobContainerConfiguration configuration, string blobName)
{
if (!configuration.NamingNormalizers.Any())
{
return 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]
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>();
config.ProviderType.ShouldBe(typeof(FakeBlobProvider1));
config.IsMultiTenant.ShouldBeFalse();
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.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