Llamando a un metodo de una clase que esta en un assembly del cual no hemos agregado una referencia

Cuantas veces nos hemos encontrado con la necesidad de ejecutar el metodo de una clase pero sabemos que dicha clase se encuentra en un assembly que no tenemos, ya sea porque no lo hemos creado o porque simplemente queremos incorporarlo al vuelo.

Pues esta es una de las funciones de el espacio de nombre System.Reflection puede realizar.

Asi es que si lo que quieren es realizar esta operación aqui les dejo algo de código

Primero deberas agregar el espacio de nombres System.Reflection 

using System.Reflection;

Lo siguiente que deberas realizar es agregar es el siguiente código

//Primero cargas el assembly a una vatriable
Assembly miAsem =
  
Assembly.LoadFrom("MiAssembly.dll");
//Luego obtienes el tipo de la clase que quieres utilizar
Type asmType = miAsem.GetType("MiAssembly.MiClase");
string texto = "Parametro a enviar";
//Despues invocas al constructor para crear una instancia
Object obj = asmType.InvokeMember(null,
 
 BindingFlags.DeclaredOnly | BindingFlags.Public |
  
BindingFlags.Instance | BindingFlags.CreateInstance,
   null, null, null);
/*Para finalizar llamas al metodo y devuelves la salida a la variable actual */
string actual;

actual = (string)asmType.InvokeMember("NombreMetodo",
   BindingFlags.InvokeMethod | BindingFlags.Public |
   BindingFlags.Instance, null, obj,
   new Object[] { texto });

Espero les guste y les deseo felices lineas.

Focus utilizando ASP.NET Ajax

A todos aquellos early adopters que ya estamos utilizando ASP.NET Ajax para desarrollar aplicaciones empresariales, nos hemos dado cuenta que la asincronia tiene sus ventajas. Pero que pasa cuando empiezo el duro trabajo de emular funcionalidad simple que ya venia utilizando en mis aplicaciones y que requerian rigurosamente de un postback para registrar los nuevos scripts que deseo incorporar para poder presentar cierta funcionalidad al usuario.

Pues como los que me leen ya han de conocer y los que no lo conozcan pues que esperan para empezar a utilizarlo.

En toda página en la que se desee implementar la funcionalidad que nos proveen las nuevas extenciones de microsoft para AJAX es necesario agregar uno y solo un ScriptManager. Pero para que sirve este maravilloso ente desconocido de nuestras nuevas aplicaciones. Pues como bien dice su nombre para administrar todos los scripts que son enviados al cliente. Y esto tiene mucho sentido al momento que nos ponemos a analizar el como funciona esta herramienta. Si bien se han desarrollado multiples caracteristicas para AJAX y cada una personalizada a cada tipo de explorador que utilizamos no todos esos scripts son descargados por nuestro explorador. Y ese es el trabajo prinicipal de este script manager. Entregar al explorador que estamos utilizando aquellos Scripts que son necesarios para nuestra apliación.

Y bueno pues si este es el administrador de los scripts, entonces podemos utilizarlo para que apartir de el en una llamada asincrona se encarge de llevar nuestros scripts al navegador.

Pero como se puede realizar esta operación, de la siguiente manera,


protected void SetFocus(string controlId)
{

ScriptManager.RegisterClientScriptBlock(this,
typeof(_Default),
"FocusScript",
@"window.setTimeout('DoFocus()', 1);
function DoFocus()
{
try {
document.getElementById('" + controlId + @"').focus();
} catch (ex) {}}", true);

El metodo que nos permite registrar los Scripts en el formulario es RegisterClientScriptBlock de la clase ScriptManager, los parametros son (this -> refieriendome a este formulario, _Default -> refiriendome al tipo de este formulario, “FocusScript” -> Nombre del Bloque, Luego aqui va el Script, y luego una bandera que indica si debe o no agregar los tags de script.

Dentro del script ejecuto un metodo de la ventana llamado setTimeOut que me permite indicar en cuanto tiempo quiero que se ejecute cierta operación que en este caso es DoFocus. Y DoFocus lo que hace es buscar el elemento que necesito tenga el foco y darselo.

Suena sencillo.

Pues ahora les toca a ustedes.

Saludos