Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MadPatryk

[Resolvido] [DESAFIO] Reflection para recuperar uma static var&#3

Recommended Posts

Galera, boa noite...

To precisando de um help...

 

Bom, preciso fazer um reflection, que chame um método (nao static) que está dentro de uma variavel estatica de uma classe caixa preta, tudo dinamicamente...

tentei com invokeMember, mas não ta rolando...

 

Exemplo que to testando, interrompe na hora de criar a var "objStatic", dizendo: "Must specify binding flags describing the invoke operation required (BindingFlags.InvokeMethod CreateInstance GetField SetField GetProperty SetProperty)."

 

Pode parecer meio louco o code, mas eu fiz mais pra ser um exemplo, do problema que to enfrentando pra instanciar um DAO do NHibernate dinamicamente... que eu preciso chamar o metodo "NHibernate.DAO.Instance.Create", dinamicamente, o problema é que esse "Instance", é uma var, não um método, se fosse método seria ótimo, e não tenho como mudar isso (por particularidades da framework do meu trabalho =p)

 

Quem puder ajudar ai, agradeço demais!!! Segue o exemplo:

Absssssss!

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace ConsoleApplication2
{
   class Program
   {
       public static void Main(String[] args)
       {
           Assembly MyAssembly = Assembly.Load("ConsoleApplication2");
           Type MyType = MyAssembly.GetType("ConsoleApplication2.ClassPublica");
           object MyObj = Activator.CreateInstance(MyType);

           string welcome = (string)MyType.InvokeMember("Teste", BindingFlags.Default | BindingFlags.InvokeMethod, null, null, new object[] { });
           Console.WriteLine(welcome);

           var objStatic = MyType.InvokeMember("Instance", BindingFlags.Default | BindingFlags.Static, null, null, new object[] { });
           var retorno = objStatic.GetType().GetMethod("Create").Invoke(objStatic, new object[] { "Patryk" });
           Console.WriteLine(retorno);

           Console.ReadLine();
       }
   }

   public class ClassPublica : ClassCaixaPreta
   {
       public String Create(string nome)
       {
           return "I am a Instance.Create in Class1 and nice to meet you, " + nome;
       }

       public static String Teste()
       {
           return "I am a Instance.Teste in Class1 and nice to meet you!";
       }
   }

   public class ClassCaixaPreta
   {
       public static ClassCaixaPreta Instance { get { return new ClassCaixaPreta(); } }

   }
}

 

 

[EDIT]

Aff, ideia... era so instanciar diretamente a classe do DAO... Ela extende o NHibernate DATA... Por que diabos eu estava tentando o modo mais dificil? rs

 

Bom, fica de historico ai....

 

abs!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.