Llamado dinámico de una clase en C#

3944 단어
Hola a todos, espero que disfruten el siguiente 미니 튜토리얼 🦖

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 💪

좋은 웹페이지 즐겨찾기