none
CSharpCodeProvider RRS feed

  • Pergunta

  • Boa noite!

    Tenho uma aplicação que realiza algumas validações, porém, isso pode variar conforme o cliente. A ideia seria customizar essas validações conforme o cliente, porém, em tempo real. Pesquisando achei esse link http://csharpbrasil.com.br/csharp/executando-codigo-dinamico-em-csharp/, e consegui executar alguns comandos e funcionou. Observei que é possível passar Arguments, como segue  a chamada abaixo, on loObject é um array de Object.

    Então criei um classe e passei como object:

       public  class Teste
            {
                public  string Nome { get; set; }
                public decimal Salario { get; set; }
            }
    
     object[] loCodeParms = new object[1];
                Teste _teste = new Teste();
                _teste.Nome = "Clarice Linspector";
                _teste.Salario = 45;
                loCodeParms[0] = _teste;
    
                try
                {
                    // Executa nosso assemble dinamico e retorna resultado
                    object loResult = loObject.GetType().InvokeMember("DynamicCode", BindingFlags.InvokeMethod, null, loObject, loCodeParms);
                    // Exibe uma mensagem com o resultado
                    MessageBox.Show("Resultado do metodo chamado:\r\n\r\n" + loResult.ToString(), "Compilação", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception loError)
                {
                    // Mensagem caso ocorra erro
                    MessageBox.Show(loError.Message, "Compilação", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

    Porém, não sei como pegar essa classe no Código Dinâmico:

    using System;
    using System.IO;
    using System.Windows.Forms;
    
    namespace MyNamespace
    {
    	public class MyClass
    	{
    		public object DynamicCode(params object[] Parameters)
    		{
    			????
    		}
    	}
    }
    

    Qualquer dica é bem vinda.

    Obrigado.

    Maia.

    quinta-feira, 29 de agosto de 2013 02:40