Métodos de extensión de C# para librerías dll en ASP.NET Core
Los métodos de extensión son una funcionalidad de C#, que nos permite agregar nuevos métodos a clases ya existentes sin necesidad de modificarlas, alterarlas o recompilarlas.
En este Post veremos, a través de un ejemplo práctico, cómo extender las funcionalidades de una librería dll (biblioteca de clases) añadiéndole nuevos métodos de extensión, por supuesto sin modificar o recompilar la librería dll original.
Paso 1: La librería dll y la aplicación Web
Supongamos que estamos trabajando con un proyecto Web ASP.NET Core MVC (WebAppCalculadora.csproj) que depende de una librería dll externa (Calculadora.dll).

La librería externa Calculadora.dll, provee a la aplicación Web de una sería de métodos que realizan las operaciones matemáticas básicas sobre dos operandos de la siguiente forma (a+b), (a-b), (a*b) y (a/b).

El código de la librería Calculadora.dll sería el siguiente:
namespace Calculadora
{
public class Operacion
{
public double Operando1 { get; set; } = 0;
public double Operando2 { get; set; } = 0;
public double Sumar()
{
return Operando1 + Operando2;
}
public double Restar()
{
return Operando1 - Operando2;
}
public double Multiplicar()
{
return Operando1 * Operando2;
}
public double Dividir()
{
if (Operando2 != 0)
return Operando1 / Operando2;
else
throw new DivideByZeroException("Error!. División entre 0.");
}
}
}
Paso 2: La librería dll de extensión (Wrapper)
Supongamos en este momento, que necesitamos para nuestra aplicación una serie de métodos adicionales que implementen las operaciones matemáticas de potencia (elevado a 'n') de la siguiente forma: (a+b)n, (a-b)n, (a*b)n y (a/b)n .
Para esto, crearemos una nueva biblioteca de clases llamada CalculadoraWrapper que "extenderá" a la anterior librería Calculadora.dll
Importante: El proyecto donde creemos la biblioteca de clases
CalculadoraWrapper, debe importar como referencia la libreríaCalculadora.dll.
Dentro de esta nueva biblioteca CalculadoraWrapper, crearemos una nueva clase estática llamada Operacion.cs, en la cual implementaremos los nuevos métodos de potencia que necesitamos.
Debemos de tener en cuenta varios puntos importantes para la nueva clase Operacion.cs:
1) La clase debe ser estática.
2) Los métodos de la clase deben ser también estáticos.
3) Cada método de la clase debe recibir como parámetro un objeto de la clase a la cual se quiere extender, precedida por this.
El código de la biblioteca CalculadoraWrapper sería el siguiente:
namespace CalculadoraWrapper
{
public static class Operacion
{
public static double SumarPow(this Calculadora.Operacion operacion, double pow)
{
return Math.Pow(operacion.Sumar(), pow);
}
public static double RestarPow(this Calculadora.Operacion operacion, double pow)
{
return Math.Pow(operacion.Restar(), pow);
}
public static double MultiplicarPow(this Calculadora.Operacion operacion, double pow)
{
return Math.Pow(operacion.Multiplicar(), pow);
}
public static double DividirPow(this Calculadora.Operacion operacion, double pow)
{
return Math.Pow(operacion.Dividir(), pow);
}
}
}
Para finalizar este paso, compilaremos la biblioteca CalculadoraWrapper, y generaremos la librería dll correspondiente (CalculadoraWrapper.dll).

Paso 3: El resultado final
Una vez generada la librería CalculadoraWrapper.dll con los nuevos métodos de extensión, la agregaremos como referencia al proyecto ASP.NET MVC inicial WebAppCalculadora.csproj.

Para comprobar la nueva funcionalidad, solo deberemos hacer referencia al nuevo ensamblado (CalculadoraWrapper.dll) en el Controlador correspondiente mediante la directiva using.
using CalculadoraWrapper;
Para finalizar compilaremos el proyecto, y ya podremos utilizar los nuevos métodos de extensión.

Nuevo comentario
Comentarios
No hay comentarios para este Post.