Hola a todos, espero que disfruten el siguiente mini tutorial 馃
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 interfaces, 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 conexi贸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铆
Archivo de configuraci贸n Config.json
{
"Medio": "Pie"
}
interface Iviajar
namespace LlamadoDinamico
{
//Marco de referencia que deben cumplir los diferentes medios de viaje
public interface Iviajar
{
bool ComienzoViaje(string destino);
}
}
Programa principal
/***
* 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 completo 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 馃挭