Dll en caliente

Solo disponible en BuenasTareas
  • Páginas : 2 (318 palabras )
  • Descarga(s) : 0
  • Publicado : 21 de octubre de 2010
Leer documento completo
Vista previa del texto
Clase de apoyo de identificación de widget:
class addin
{
public string dllName;
public string className;
public string displayName;

public adin(stringdllName, string className, string displayName)
{
this.dllName = dllName;
this.className = className;
this.displayName = displayName;
}
}

Dado un patha disco, se buscarán todos los widgets disponibles en todas las librerías presentes en dicho path:
public void LoadWidgets(string path)
{
if (widgets != null)
{widgets.Clear();
}
widgets = new List();

string[] files = Directory.GetFiles(path, "*.dll");
for (int i = 0; i < files.Length; i++)
{
List classes =GetWidgetClassesFromFile(files[i]);
widgets.AddRange(classes);
}
}

Dada una librería en disco, se trata de identificar los widgets que contiene (si contiene alguno) y devolver unalista de los mismos:

private List GetWidgetClassesFromFile(string dll)
{
List ret = new List();

try
{
Assembly assembly = Assembly.LoadFrom(dll);foreach (Type typeAsm in assembly.GetTypes())
{
if (typeAsm.Namespace == "gdeShell.Widgets")
{
string displayName = typeAsm.Name;
try{
displayName = ((DisplayName)typeAsm.GetCustomAttributes(typeof(DisplayName), false)[0]).Name;
}
catch{}

ret.Add(new addin(dll, typeAsm.Name,displayName));
}
}
}
catch (Exception ex)
{
string message = ex.Message;
}

return ret;
}

Cargar un widget determinado de unalibrería dada. Se conoce tanto la librería como el widget que contiene y se pretende cargar una instancia del mismo.

private WidgetBase GetWidgetFromFile(string dll, string widgetName)
{...
tracking img