Carga Dinámica de un Ensamblado en SilverLight

Cuando desarrollamos en Silverlight, no nos tenemos que olvidar de que estamos trabajando en Web aunque nos de la sensación que estamos desarrollando en WPF, y que tenemos que tener cuidado con el peso de nuestro ensamblado, muchas veces en aplicaciones Silverlight hacemos que se bajen todos los componentes y puede que el usuario no llegue a utilizarlos, entonces porque bajarlos?, no es mejor que estos componentes se bajen cuando el usuario vaya a utilizarlos?, es verdad, que con esta técnica el usuario sufrira un pequeño retardo la primera vez que demande el control Silverlight, pero mejoraremos la primera presentación de nuestra aplicación.

La verdad que es bastante sencillo realizar la carga dinámica en SilverLight, lo primero es copiar el ensamblado en la carpeta ClientBin de nuestra aplicación Web, lo segundo es en nuestro código realizar la petición de bajada de ensamblado, esto lo conseguimos con estas líneas de código

 

              WebClient client = new WebClient();
               client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
               client.OpenReadAsync(new Uri(«MiEnsamblado.dll», UriKind.Relative));

Con estas lineas realizamos la petición y en el evento  OpenReadcompleted

 

void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
       {
           AssemblyPart assemblyPart = new AssemblyPart();
           Assembly assembly = assemblyPart.Load(e.Result);

           UserControl controlsilverlight= assembly.CreateInstance(«MiEnsamblado.MiControl») as UserControl;
           if (controlsilverlight != null)
           {
               controlsilverlight.SetValue(Canvas.LeftProperty, 100);
               MiCanvas.Children.Add(editor);
           }

       }

Cargamos el ensambldo mediante reflection y lo añadimos al  contenedor donde queremos que se muestre y ya esta.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *