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.