Ayuda, ejecutar métodos de objetos creados en tiempo de ejecución

ToroEon

Bovino Milenario
#1
Que tal compas, así es necesito ejecutar métodos, pero no de la manera tradicional. Les comento:

Tengo una clase, en la cuál heredo de una interfaz, esta clase me crea instancias y me regresa el objeto, a su vez este objeto lo agrego a un List, para saber cuantos objetos tengo creados y así, según yo, al llegar a cierto flujo del código que mandó a crear el objeto hacer un foreach, para que así por cada tipo de objeto que tengo en mi lista se ejecute un método en común. El detalle es que se tiene que hacer en tiempo de ejecución, ya que no sé cuantos objetos se crearon, y aunque sé que nombres y poder valorar si esos nombres de objetos están vacíos o no, me gustaría hacerlo de forma dinámica: Pongo el código pa´ pronta referencia:

Este es el código que me crea los objetos:

public enum IdentificadorTipo
{
Efectivo = 1,
TarjetaBancaria = 2
}

public class FabricaTiposPago
{
private static volatile FabricaTiposPago instancia;

public static FabricaTiposPago Instancia
{
get
{
if (instancia == null)
{
lock (raiz)
{
if (instancia == null)
{
instancia = new FabricaTiposPago();
}
}
}
return instancia;
}
}

public ITipoPago CreaTipoPago(IdentificadorTipoPago id)
{
ITipoPago tipoPago = null;

switch (id)
{
case IdentificadorTipoPago.Efectivo:
tipoPago = new EfectivoBO();
break;

case IdentificadorTipoPago.TarjetaBancaria:

break;
}
return tipoPago;

}

}

---------------------------------------------------------

En esta clase agregó los objetos a la lista:


public class Operacion : IEnumerable, IEnumerator
{
private int actual = -1;
private PropiedadesOperacion propiedades;
List<ITipoPago> tiposPago;

public PropiedadesOperacion Propiedades
{
get { return propiedades; }
set { propiedades = value; }
}

public List<ITipoPago> TiposPago
{
get { return tiposPago; }
set { tiposPago = value; }
}
public Operacion()
{
tiposPago = new List<ITipoPago>();
}


public IEnumerator GetEnumerator()
{
return (IEnumerator)this;
}

public object Current
{
get { return actual; }
}

public bool MoveNext()
{
bool resultado = true;
actual++;
if(actual == tiposPago.Count)
return false;
return resultado;
}

public void Reset()
{
actual = -1;
}
}

----------------------------------------------------



Aqui agregó de manera manual el objeto(aunque en cierta parte del código puedo crear otros tipos de pago):

efectivo = fabricaTiposPago.CreaTipoPago(IdentificadorTipoPago.Efectivo);
listaTiposPago.TiposPago.Add(efectivo); //--->> Agregar los tipos de pago



Y aquí es la parte en dónde tengo broncas:


foreach (int tipoPago in listaTiposPago)
{
//Registrar c/u de los pagos
efectivo.Registra(); <------ Aqui en vez de ponerlo en código duró sería algo como listaTiposPago.ITiposPago.[Objeto].[MétodoEjecutar()]
//tarjetaBancaria.Registra();
}

Ojala explique, y alguien me pueda ayudar, les comentó que con Reflection no me gustaría hacerlo, ya que tengo que buscar el nombre del ensamblado, y así poder acceder a sus métodos, PERO, aún así no queda de forma dinámica.
 
Arriba