Pergunta

Eu sei como criar algum objeto por reflexão e passar alguns argumentos.

Dim assembly As System.Reflection.Assembly
Dim control As Object

assembly = System.Reflection.Assembly.Load("WpfControlLibrary1")
control = assembly.CreateInstance("WpfControlLibrary1.Main")

control.Maximize("true")

Minha pergunta é se existe uma abordagem para obter informações do "controle" para "o proprietário" desse "controle".

Então, acho que deve haver alguma forma de ter interação bidirecional entre o proprietário e a montagem criada.

Por exemplo, dentro de algum Timer, quero obter os estados do "controle" periodicamente.

foreach(...)
{

var state = control.GetState(); // ????? Is it possible ?
Sleep(10000);

}

Aqui podemos ver como passar os parâmetros

Então, o que eu preciso é recuperar algum objeto devolvido.

Agradeço antecipadamente por qualquer pista útil, meus irmãos e irmãs da programação!

Foi útil?

Solução

Para invocar o método definido em classes em outro assembly, você precisa de algo assim:

Assembly assembly = Assembly.Load("OtherAssembly");
Type controlType = assembly.GetType("OtherAssembly.OtherAssemblyClass");
object control = Activator.CreateInstance(controlType);

controlType.InvokeMember("SetFullName", BindingFlags.InvokeMethod, null, 
                         control, new object[] { "FirstName", "LastNameski" });

Isso invocará o método SetFullName da classe OtherAssemblyClass do assembly OtherAssembly no objeto control, usando os parâmetros "FirstName" e "LastNameski"

object result = controlType.InvokeMember("GetFullName", 
                            BindingFlags.InvokeMethod, null, control, null);

Isso invocará um método chamado GetFullName no mesmo objeto, que não aceita parâmetros (portanto, o último null na chamada) e retorna uma string.

Console.WriteLine(result.GetType().FullName);

Isso imprimirá "System.String"

Console.WriteLine(result);

Isso imprimirá o "FirstName LastNameski".


no exemplo, o outro assembly contém esta classe:

namespace OtherAssembly
{
  public class OtherAssemblyClass
  {
    private string firstName;
    private string lastName;

    public string GetFullName()
    {
        return firstName + " " + lastName;
    }

    public void SetFullName(string first, string last)
    {
        firstName = first;
        lastName = last;
    }
  }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top