Llamado dinámico de una clase en C#
Aveces tenemos una configuración de un sistema, ya sea por base de datos o algún archivo de configuración.
Dependiendo de esta configuración el comportamiento del programa en su implementación puede cambiar mucho y como nosotros somos programadores elegantes 😎 no queremos hacer un switch case de implementación de interface, llamamos el objeto de nuestra configuración y voila 🤗.
Un ejemplo mundo real que estoy aplicando esto es para un bot de trading donde la configuración apunta a realizar operaciones en diferentes exchanges, cada exchange maneja diferentes apis, reglas de negocio e implementaciones, por lo cual esta técnica es sumamente útil.
Voy a plantear la siguiente situación hipotética, viajar, podemos viajar de muchas formas!
Desde un archivo json en nuestro ejemplo podemos, configurar el medio de transporte (avión, pie, carro y trén).
Para poner un poco de orden al caos de llamar objetos sin conxión, implementamos una interfaz la cual deben cumplir todos los objetos
Para facilitar la lectura de un objeto json, usaremos la librería newton soft.
El proyecto en su estructura quedaría así
Config.json 구성 아카이브
{
"Medio": "Pie"
}
인터페이스 Iviajar
namespace LlamadoDinamico
{
//Marco de referencia que deben cumplir los diferentes medios de viaje
public interface Iviajar
{
bool ComienzoViaje(string destino);
}
}
프로그램 교장
/***
* Ejemplo de como invocar una clase dinámicamente por medio de una configuración almacenada en un archivo
* de configuración
***/
using LlamadoDinamico;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
string configPath = Directory.GetCurrentDirectory() + @"\Config.json";
if (File.Exists(configPath))
{
//Obtención en bruto del archivo a texto
string textConfiguration = File.ReadAllText(configPath);
//de string a Jobject
dynamic data = JObject.Parse((string)textConfiguration);
string medio = data["Medio"];
//se incluye la ruta del namespace completo más la clase
string strclase = "LlamadoDinamico.FormasdeViaje." + medio;
Iviajar viajar = (Iviajar)System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(strclase);
bool resultado = viajar.ComienzoViaje("FarFaraway!");
Console.ReadLine();
}
Implementación de una de las forma de viaje
Pie.cs
namespace LlamadoDinamico.FormasdeViaje
{
public class Pie : Iviajar
{
public bool ComienzoViaje(string destino)
{
bool respuesta = false;
if (destino == "FarFaraway!")
{
Console.WriteLine("voya pie y está muy lejos, usa otro medio de transporte");
}
else
{
Console.WriteLine("Andando ando!");
respuesta = true;
}
return respuesta;
}
}
}
Baja el ejemplo complete acá
https://github.com/sergiotechx/LlamadoDinamico
Espero que te haya sido de utilidad 😁 y a seguir con toda la energía positiva en tu proyecto, que eso no se hace sólo 💪
Reference
이 문제에 관하여(Llamado dinámico de una clase en C#), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sergiotechx/llamado-dinamica-de-una-clase-en-c-45ek텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)