Browse Source

Created basic interfaces for the storage.

pull/4105/head
Halil İbrahim Kalkan 6 years ago
parent
commit
c73cd6962d
  1. 7
      framework/Volo.Abp.sln
  2. 48
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerManagerExtensions.cs
  3. 41
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerNameAttribute.cs
  4. 35
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobContainerManager.cs
  5. 5
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobManager.cs
  6. 16
      framework/test/Volo.Abp.BlobStoring.Tests/Volo.Abp.BlobStoring.Tests.csproj
  7. 9
      framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/AbpBlobStoringTestBase.cs
  8. 13
      framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/AbpBlobStoringTestModule.cs
  9. 35
      framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/BlobContainerNameAttribute_Tests.cs

7
framework/Volo.Abp.sln

@ -293,6 +293,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Mvc.UI.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BlobStoring", "src\Volo.Abp.BlobStoring\Volo.Abp.BlobStoring.csproj", "{A0CFBDD6-A3CB-438C-83F1-5025F12E2D42}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BlobStoring.Tests", "test\Volo.Abp.BlobStoring.Tests\Volo.Abp.BlobStoring.Tests.csproj", "{D53A17BB-4E23-451D-AD9B-E1F6AC3F7958}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -871,6 +873,10 @@ Global
{A0CFBDD6-A3CB-438C-83F1-5025F12E2D42}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A0CFBDD6-A3CB-438C-83F1-5025F12E2D42}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A0CFBDD6-A3CB-438C-83F1-5025F12E2D42}.Release|Any CPU.Build.0 = Release|Any CPU
{D53A17BB-4E23-451D-AD9B-E1F6AC3F7958}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D53A17BB-4E23-451D-AD9B-E1F6AC3F7958}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D53A17BB-4E23-451D-AD9B-E1F6AC3F7958}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D53A17BB-4E23-451D-AD9B-E1F6AC3F7958}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -1019,6 +1025,7 @@ Global
{8B758716-DCC9-4223-8421-5588D1597487} = {447C8A77-E5F0-4538-8687-7383196D04EA}
{79323211-E658-493E-9863-035AA4C3F913} = {447C8A77-E5F0-4538-8687-7383196D04EA}
{A0CFBDD6-A3CB-438C-83F1-5025F12E2D42} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
{D53A17BB-4E23-451D-AD9B-E1F6AC3F7958} = {447C8A77-E5F0-4538-8687-7383196D04EA}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5}

48
framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerManagerExtensions.cs

@ -0,0 +1,48 @@
using System.Threading;
using System.Threading.Tasks;
namespace Volo.Abp.BlobStoring
{
public static class BlobContainerManagerExtensions
{
/// <summary>
/// Gets a named container.
/// </summary>
/// <param name="blobContainerManager">The blob container manager</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>
/// The container object.
/// </returns>
public static Task<IBlobContainer> GetAsync<TContainer>(
this IBlobContainerManager blobContainerManager,
CancellationToken cancellationToken = default
)
{
return blobContainerManager.GetAsync(
BlobContainerNameAttribute.GetContainerName<TContainer>(),
cancellationToken
);
}
/// <summary>
///
/// </summary>
/// <param name="blobContainerManager">The blob container manager</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <typeparam name="TContainer">Type of the container</typeparam>
/// <returns>
/// Returns true if actually deleted the container.
/// Returns false if the container with the given <typeparamref name="TContainer"/> type was not exists.
/// </returns>
public static Task<bool> DeleteAsync<TContainer>(
this IBlobContainerManager blobContainerManager,
CancellationToken cancellationToken = default
)
{
return blobContainerManager.DeleteAsync(
BlobContainerNameAttribute.GetContainerName<TContainer>(),
cancellationToken
);
}
}
}

41
framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerNameAttribute.cs

@ -0,0 +1,41 @@
using System;
using System.Reflection;
using JetBrains.Annotations;
namespace Volo.Abp.BlobStoring
{
public class BlobContainerNameAttribute : Attribute
{
[NotNull]
public string Name { get; }
public BlobContainerNameAttribute([NotNull] string name)
{
Check.NotNullOrWhiteSpace(name, nameof(name));
Name = name;
}
public virtual string GetName(Type type)
{
return Name;
}
public static string GetContainerName<T>()
{
return GetContainerName(typeof(T));
}
public static string GetContainerName(Type type)
{
var nameAttribute = type.GetCustomAttribute<BlobContainerNameAttribute>();
if (nameAttribute == null)
{
return type.FullName;
}
return nameAttribute.GetName(type);
}
}
}

35
framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobContainerManager.cs

@ -0,0 +1,35 @@
using System.Threading;
using System.Threading.Tasks;
namespace Volo.Abp.BlobStoring
{
public interface IBlobContainerManager
{
/// <summary>
/// Gets a named container.
/// </summary>
/// <param name="name">The name of the container</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>
/// The container object.
/// </returns>
Task<IBlobContainer> GetAsync(
string name,
CancellationToken cancellationToken = default
);
/// <summary>
/// Deletes a container.
/// </summary>
/// <param name="name">The name of the container</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>
/// Returns true if actually deleted the container.
/// Returns false if the container with the given <paramref name="name"/> was not exists.
/// </returns>
Task<bool> DeleteAsync(
string name,
CancellationToken cancellationToken = default
);
}
}

5
framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobManager.cs

@ -79,9 +79,4 @@ namespace Volo.Abp.BlobStoring
//TODO: Create shortcut extension methods: GetAsArraryAsync, GetAsStringAsync(encoding) (and null versions)
}
public interface IBlobContainerManager
{
//Get (or create), Delete (if does exists)
}
}

16
framework/test/Volo.Abp.BlobStoring.Tests/Volo.Abp.BlobStoring.Tests.csproj

@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.test.props" />
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\AbpTestBase\AbpTestBase.csproj" />
<ProjectReference Include="..\..\src\Volo.Abp.BlobStoring\Volo.Abp.BlobStoring.csproj" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
</ItemGroup>
</Project>

9
framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/AbpBlobStoringTestBase.cs

@ -0,0 +1,9 @@
using Volo.Abp.Testing;
namespace Volo.Abp.BlobStoring
{
public abstract class AbpBlobStoringTestBase : AbpIntegratedTest<AbpBlobStoringTestModule>
{
}
}

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

@ -0,0 +1,13 @@
using Volo.Abp.Modularity;
namespace Volo.Abp.BlobStoring
{
[DependsOn(
typeof(AbpBlobStoringModule),
typeof(AbpTestBaseModule)
)]
public class AbpBlobStoringTestModule : AbpModule
{
}
}

35
framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/BlobContainerNameAttribute_Tests.cs

@ -0,0 +1,35 @@
using Shouldly;
using Xunit;
namespace Volo.Abp.BlobStoring
{
public class BlobContainerNameAttribute_Tests
{
[Fact]
public void Should_Get_Specified_Name()
{
BlobContainerNameAttribute
.GetContainerName<MyContainerType2>()
.ShouldBe("ContName2");
}
[Fact]
public void Should_Get_Full_Class_Name_If_Not_Specified()
{
BlobContainerNameAttribute
.GetContainerName<MyContainerType1>()
.ShouldBe(typeof(MyContainerType1).FullName);
}
private class MyContainerType1
{
}
[BlobContainerName("ContName2")]
private class MyContainerType2
{
}
}
}
Loading…
Cancel
Save