FlowStorage 1.0.0
See the version list below for details.
dotnet add package FlowStorage --version 1.0.0
NuGet\Install-Package FlowStorage -Version 1.0.0
<PackageReference Include="FlowStorage" Version="1.0.0" />
<PackageVersion Include="FlowStorage" Version="1.0.0" />
<PackageReference Include="FlowStorage" />
paket add FlowStorage --version 1.0.0
#r "nuget: FlowStorage, 1.0.0"
#:package FlowStorage@1.0.0
#addin nuget:?package=FlowStorage&version=1.0.0
#tool nuget:?package=FlowStorage&version=1.0.0
<h1 align="center"> FlowStorage Library </h1>
<p align="center"> <a href="https://www.nuget.org/packages/FlowStorage"><img src="https://img.shields.io/nuget/vpre/FlowStorage.svg" alt="Version" /></a> <a href="https://www.nuget.org/packages/FlowStorage"><img src="https://img.shields.io/nuget/dt/FlowStorage.svg" alt="Downloads" /></a> <a href="https://github.com/robinrodricks/FlowStorage/graphs/contributors"><img src="https://img.shields.io/github/contributors/robinrodricks/FlowStorage.svg" alt="GitHub contributors" /></a> <a href="https://www.codacy.com/gh/robinrodricks/FlowStorage/dashboard"><img src="https://app.codacy.com/project/badge/Grade/691e960f4e1a45e58e3556acaf3adf5c" alt="Codacy Badge" /></a> <a href="https://github.com/robinrodricks/FlowStorage/blob/develop/LICENSE"><img src="https://img.shields.io/github/license/robinrodricks/FluentStorage.svg" alt="License" /></a> </p>
<p align="center"> <b>FluentStorage is free, but powered by</b> <a href="https://github.com/sponsors/robinrodricks"><b>your donations</b></a> </p>
FlowStorage es una librería desarrollada en .NET 8 que proporciona una abstracción para gestionar el almacenamiento de datos en flujos ("flow storage").
La librería permite trabajar tanto con almacenamiento local (sistema de ficheros) como con Azure Blob Storage, ofreciendo una solución flexible y escalable para aplicaciones distribuidas.
Características
Abstracciones y Contratos
Define interfaces que permiten interactuar con el almacenamiento sin depender de implementaciones específicas.Soporte para Múltiples Almacenamientos
- LocalFlowStorage: Implementación basada en el sistema de ficheros local.
- AzureBlobFlowStorage: Implementación que utiliza Azure Blob Storage (integración con wrappers para facilitar testing y abstraer el SDK).
Patrón Factory
La claseFlowStorageFactorypermite crear la implementación correcta deIFlowStorageen función de la configuración (mediante enumerados y variables de entorno).Integración con Dependency Injection (DI)
ExtensiónAddFlowStoragepara registrar en el contenedor de dependencias solo las implementaciones necesarias según el tipo de almacenamiento configurado.Tests Unitarios y de Integración Cobertura completa con tests unitarios, tests de integración (usando TestContainers y Azurite para Azure, y directorios temporales para almacenamiento local), tests de casos extremos y pruebas de concurrencia.
Requisitos
- .NET 8 o superior
- Docker (para ejecutar los tests de integración con Azurite a través de TestContainers)
Instalación
La librería está disponible en NuGet.org. Para instalarla, simplemente añade el paquete a tu proyecto usando el siguiente comando:
Abre la solución en Visual Studio o ejecuta:
dotnet add package FlowStorage
O, si prefieres utilizar el Administrador de paquetes NuGet en Visual Studio, busca "FlowStorage" y selecciona la última versión disponible.
Configuración
La librería se configura a través de IConfiguration y/o variables de entorno.
Se requiere definir al menos los siguientes valores:
FlowStorage:type o la variable de entorno FLOWSTORAGE_TYPE
Define el tipo de almacenamiento a utilizar. Valores posibles:LocalStorageAzureBlobStorage
FlowStorage:connectionString o la variable de entorno FLOWSTORAGE_CONNECTION_STRING
Cadena de conexión para el almacenamiento:- Para LocalStorage: Ruta base para los archivos.
- Para AzureBlobStorage: Cadena de conexión de Azure Storage o
"UseDevelopmentStorage=true"para desarrollo con Azurite.
Ejemplo de appsettings.json:
{
"FlowStorage": {
"type": "AzureBlobStorage",
"connectionString": "UseDevelopmentStorage=true"
}
}
Uso
Configuración de DI
Para registrar la librería en el contenedor de dependencias, utiliza el método de extensión AddFlowStorage. Por ejemplo:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using TuLibreria.Extensions;
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
var services = new ServiceCollection();
services.AddFlowStorage(configuration);
// Ahora puedes inyectar IFlowStorage en tus servicios.
var serviceProvider = services.BuildServiceProvider();
var flowStorage = serviceProvider.GetRequiredService<IFlowStorage>();
Ejemplo de Uso en Código
public class MyStorageService
{
private readonly IFlowStorage _flowStorage;
public MyStorageService(IFlowStorage flowStorage)
{
_flowStorage = flowStorage;
}
public async Task UploadAndDownloadFile(string container, string fileName, string content)
{
await _flowStorage.CreateContainerIfNotExistsAsync(container);
await _flowStorage.UploadFileAsync(container, fileName, content);
var downloadedContent = await _flowStorage.ReadFileAsync(container, fileName);
Console.WriteLine($"Downloaded content: {downloadedContent}");
}
}
Tests
La solución incluye una suite de tests completa:
Tests Unitarios:
Validan la lógica de negocio, manejo de excepciones y validaciones de parámetros tanto enLocalFlowStoragecomo enAzureBlobFlowStorage.Tests de Integración:
- LocalFlowStorage: Utiliza directorios temporales para probar la lectura/escritura en el sistema de ficheros.
- AzureBlobFlowStorage: Se realizan tests de integración contra Azurite, levantado dinámicamente con TestContainers.
Tests de Concurrencia y Casos Extremos:
Se simulan escenarios con operaciones concurrentes, datos muy grandes y caracteres especiales para asegurar la robustez de la librería.
Para ejecutar todos los tests:
dotnet test
Contribuciones
Las contribuciones son bienvenidas. Por favor, sigue las pautas de contribución del repositorio y asegúrate de que todos los tests pasen antes de enviar un pull request.
Licencia
¡Gracias por usar FlowStorage! Si tienes alguna pregunta o sugerencia, no dudes en abrir un issue o contactarnos.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- Azure.Storage.Blobs (>= 12.24.0)
- Microsoft.Extensions.Configuration.Abstractions (>= 9.0.3)
- Microsoft.Extensions.Configuration.Binder (>= 9.0.3)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.3)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.3)
- Newtonsoft.Json (>= 13.0.3)
- System.IO.Abstractions (>= 22.0.12)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.