Pergunta

Usando reflexão, preciso investigar uma DLL de usuário e criar um objeto de classe nela.

Qual é a maneira simples de fazer isso?

Foi útil?

Solução

Outras dicas

System.Reflection.Assembly é a classe que você deseja usar.Ele contém muitos métodos para iterar os tipos contidos em uma DLL de usuário.Você pode iterar através de cada classe, talvez ver se ela herda de uma interface específica, etc.

http://msdn.microsoft.com/en-us/library/system.reflection.assembly_members.aspx

Investigar Assembly.GetTypes() método para obter a lista de tipos, ou Assembly.GetExportedTypes() apenas para os públicos.

Você pode criar uma instância de uma classe a partir de um objeto Type usando Activator.CreateInstance, para obter todos os tipos em uma dll você pode usar Assembly.GetTypes

Dê uma olhada nestes links:

http://www.java2s.com/Code/CSharp/Development-Class/Createanobjectusingreflection.htm

http://msdn.microsoft.com/en-us/library/k3a58006.aspx

Você basicamente usa a reflexão para carregar um assembly e, em seguida, encontra um tipo de seu interesse.Depois de ter o tipo, você pode pedir para encontrar seus construtores ou outros métodos/propriedades.Depois de ter o construtor, você pode invocá-lo.Fácil!

Como já foi dito, você precisa cutucar o namespace System.Reflection.

Se você souber com antecedência o local/nome da DLL que deseja carregar, será necessário iterar por meio de Assembly.GetTypes().

Em Pseudocódigo seria algo assim:

Criar e montar objeto.

Itere todos os tipos contidos na montagem.

Depois de encontrar o que procura, invoque-o (CreateInstance)…

Use-o com sabedoria.

;)

Eu tenho bastante código do Reflection se você quiser dar uma olhada, mas a tarefa é muito simples e há pelo menos uma dúzia de artigos com exemplos disponíveis.(Também conhecido como Google).Apesar disso, o MSDN é seu amigo para referência de reflexão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top