miércoles, 3 de marzo de 2010

Uso de la clase Assembly

¿ Alguna vez se han interesado en conocer los contenidos de un Assembly ?, pues para algunos curiosos como yo, existe en el Framework de .net una clase que permite acceder a estos recursos de una manera realmente sencilla.

Accediendo al NameSpaces using System.Reflection;

Lo primero que se debe hacer es cargar el Assembly por medio del método Load.

 Assembly Ass = null;
/// <summary>
/// Carga un Assembly en base a su nombre
/// (Sin extension .dll, .exe, etc.))
/// </summary>
/// <returns>Obtiene la Información del Assembly
/// </returns>
Assembly CargarAssembly()
{
if (Ass == null)
return Assembly.Load("System.Windows.Forms");
else
return Ass;
}

para Obtener la Información de un determinado método o propiedad. lo pueden apreciar en esta función.

/// <summary>
/// Listado de las Clases del ensamblado
/// </summary>
/// <returns>Obtiene una Clases de Tipos</returns>
public List<InfoClass> GetInformacionClase()
{
/*Lista contenedora de la Informacion de las Clases*/
List<InfoClass> Lista = new List<InfoClass>();
/*Se recorren los tipos del Assembly*/
foreach (InfoClassitem in CargarAssembly().GetTypes())
{
/*Se verifica que sean Clases el Tipo de Filtro */
if (item.IsClass)
{
//Se agregan a la Lista
Lista.Add
(
new InfoClass()
{
Nombre = item.Name,
NombreCompleto = item.FullName,
NombreConstructores =
item.GetConstructors().ToList(),
eventos = item.GetEvents().ToList(),
Interfaces =
item.GetInterfaces().ToList(),
Metodos = item.GetMethods().ToList(),
Propiedades = item.GetProperties().ToList()
}
)
}
}

//se retorna el Contenido de la Colección
return Lista;
}
Para ello cree una clase que me permita encapsular la información en la lista y así poder obtener la información del Assembly, de una forma ordenada.
public class InfoClass
{
public string Nombre { get; set; }
public string NombreCompleto { get; set; }
public List<ConstructorInfo> NombreConstructores{get;set;}
public List<MethodInfo> Metodos { get; set; }
public List<PropertyInfo> Propiedades { get; set; }
public List<EventInfo> eventos { get; set; }
public List<Type> Interfaces { get; set; }
}


y lo único que tienen que hacer, es consumir la lista para mostrar el contenido del Assembly. 


image 


Adjunto el proyecto para que lo analicen y me comenten que más se le puede agregar.



no olviden comentar..

Saludos. Sergio. V.

2 comentarios:

  1. Hola. Muchas gracias. Tenía inmensos vacíos sobre este tema.

    ResponderEliminar