Interceptor.AOP.AspNetCore
2.0.1
dotnet add package Interceptor.AOP.AspNetCore --version 2.0.1
NuGet\Install-Package Interceptor.AOP.AspNetCore -Version 2.0.1
<PackageReference Include="Interceptor.AOP.AspNetCore" Version="2.0.1" />
<PackageVersion Include="Interceptor.AOP.AspNetCore" Version="2.0.1" />
<PackageReference Include="Interceptor.AOP.AspNetCore" />
paket add Interceptor.AOP.AspNetCore --version 2.0.1
#r "nuget: Interceptor.AOP.AspNetCore, 2.0.1"
#addin nuget:?package=Interceptor.AOP.AspNetCore&version=2.0.1
#tool nuget:?package=Interceptor.AOP.AspNetCore&version=2.0.1
📦 Interceptor.AOP.AspNetCore
Descripción general
Complemento para Interceptor.AOP
que permite registro automático de servicios interceptados mediante IServiceCollection
.
🔌 Ideal para ASP.NET Core (API, Web, Worker), permite usar:
🎯 Propósito
Centralizar y estandarizar:
- 🛡️ Manejo de excepciones con contexto
- 🔁 Reintentos y circuit breaker con Polly
- 🧪 Validaciones automáticas con DataAnnotations
- ⏱️ Medición de tiempo de ejecución
- 🔐 Cacheo en memoria por método
- 📝 Auditoría flexible: entrada, salida y errores
🚀 Características
✔️ Soporte para métodos síncronos y asincrónicos (Task
, Task<T>
)
✔️ Decoración por atributos: fácil de aplicar, simple y expresiva, sin modificar código existente
✔️ Interceptores desacoplados y extensibles
✔️ Soporte para ILogger<T>, IMemoryCache y IOptions<T>
✔️ Ideal para microservicios, APIs, backend robusto
✔️ Integración lista para DI con Interceptor.AOP.AspNetCore
📥 Instalación
Desde NuGet:
dotnet add package Interceptor.AOP.AspNetCore
🧩 Configuración con DI
Ejemplo de uconfiguración en Program.cs o Startup.cs
services.AddInterceptedTransient<IProcesarDatosService, ProcesarDatosService>();
Con esta línea, todos los métodos públicos de ProcesarDatosService serán interceptados automáticamente si están decorados con [Audit], [Retry], etc.
Ejemplo de uso de decoradores
public interface IProcesarDatosService
{
[Audit("ProcesarArchivo", LogInput = true)]
[Retry(3)]
[Fallback("FallbackProcesarArchivo")]
[MeasureTime]
[Validate]
[Cache(60)]
int ProcesarArchivo(int number);
int FallbackProcesarArchivo(int number);
}
Ejemplo de implementacion
public class ProcesarDatosService : IProcesarDatosService
{
private readonly ILogger<ProcesarDatosService> _logger;
public ProcesarDatosService(ILogger<ProcesarDatosService> logger)
{
_logger = logger;
}
public int ProcesarArchivo(int number)
{
_logger.LogInformation("📊 Calculando algo con {number}", number);
if (number < 0) throw new Exception("Valor negativo no permitido");
return number * 10;
}
public int FallbackProcesarArchivo(int number)
{
_logger.LogWarning("⚠️ Fallback ejecutado para {number}", number);
return -1;
}
}
📚 Atributos disponibles
Decorador | Description | |
---|---|---|
📝 | [Audit] |
Auditoría flexible: entrada, salida y manejo de excepciones con contexto |
🔁 | [Retry(n)] |
Reintenta el método n veces si lanza excepción |
🛡️ | [Fallback("...")] |
Llama a otro método si el actual falla |
⏱️ | [MeasureTime] |
Logea cuánto tarda la ejecución del método |
🧪 | [Validate] |
Validaciones automáticas con DataAnnotations |
🔐 | [Cache(n)] |
Cachea el resultado por n segundos (solo para Task<T> y métodos síncronos) |
📝[Audit] - Auditoría flexible
Auditoría avanzada
El atributo [Audit] permite registrar entrada, salida y errores con granularidad y contexto funcional:
Por defecto
[Audit]
public Task<string> ObtenerClientesAsync() { ... }
➡️ Registra entrada, salida y errores automáticamente.
Con contexto funcional
[Audit("ProcesarArchivo")]
public void ProcesarArchivo(string path) { ... }
➡️ Aparece en logs como: 📥 Entrada en ProcesarArchivo 📤 Salida de ProcesarArchivo ❌ Error en ProcesarArchivo (Auditable)
Auditoría selectiva
[Audit(LogInput = false, LogOutput = false, LogError = true)] // Solo errores
[Audit(Contexto = "Importación", LogOutput = false)] // Entrada + error
[Audit(LogInput = false, LogOutput = true, LogError = false)] // Solo salida
🔁 [Retry(n)] - Reintentos automáticos
Permite reintentar un método si lanza una excepción.
[Retry(3)]
public void ProcesarArchivo() { ... }
➡️ Reintenta hasta 3 veces antes de fallar.
Ideal cuando interactuás con servicios externos, bases de datos o archivos inestables.
🛑 [Fallback("MetodoAlternativo")] - Método alternativo en caso de error
Define un método de respaldo si el original lanza excepción después de los reintentos.
[Fallback("ProcesarArchivoFallback")]
public void ProcesarArchivo() { ... }
public void ProcesarArchivoFallback() { ... }
➡️ Si ProcesarArchivo() falla, se ejecuta ProcesarArchivoFallback() automáticamente.
⏱️ [MeasureTime] - Medición de rendimiento
Registra cuánto tarda en ejecutarse un método.
[MeasureTime]
public void CalcularEstadisticas() { ... }
➡️ Logea automáticamente algo como:
⏱️ CalcularEstadisticas ejecutado en 215ms
🧪 [Validate] - Validación automática
Aplica validaciones usando [Required], [Range], etc. sobre modelos.
[Validate]
public void GuardarCliente(ClienteModel cliente) { ... }
public class ClienteModel
{
[Required]
public string Nombre { get; set; }
}
➡️ Si cliente.Nombre es null, lanza ValidationException.
🧠 [Cache(segundos)] - Cache automático en memoria
Guarda el resultado de un método por X segundos.
[Cache(60)]
public async Task<string> ObtenerDatos() => "Desde API";
➡️ Durante 60 segundos, ObtenerDatos() devuelve la misma respuesta (usando IMemoryCache).
⚠️ Solo válido para métodos síncronos o Task<T>. No se aplica a Task (sin retorno).
Author
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. 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. |
-
net6.0
- Interceptor.AOP (>= 1.3.8)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.