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.