MEF y la Recomposición

En el anterior articulo vimos el hola mundo de MEF, en este articulo vamos a tratar la recomposición y con esto nos referimos a que MEF nos permite añadir plugins en tiempo de ejecución sin tener que reiniciar nuestro programa.

Para nuestro ejemplo he cambiado un poco el código anterior, he añadido al contrato la propiedad NumCall con la que cada vez que se ejecute el método Hello se mostrará un mensaje con Hola en el idioma seleccionado y el número de veces que lo vamos llamando.

Además he añadido en la ventana un botón de Añadir Plugin que simulara que nos bajamos de internet un plugin nuevo y lo cargamos, la bajada la haremos a a mano copiando en el directorio pugins un nuevo plugin HelloWorldEuskera antes de pulsar el botón. La pantalla quedaría de esta forma.

 

image

 

Para realizar la carga de nuevo plugins MEF nos proporciona el método Refresh en la clase DirectoryCatalog, de manera que el botón “Añadir Plugin” tendría el código.

1 void btnAdd_Click(object sender, RoutedEventArgs e) 2 { 3 //Refrescamos el catalogo para ver si hay mas plugins en el directorio 4 catalog.Refresh(); 5 6 }

 

Si lo ejecutamos y una vez ejecutado copiamos el nuevo plugin y damos al botón “Añadir Plugin” se nos producirá la excepción

 

image

Esto es debido a que no hemos puesto el atributo AllowRecomposition

1 [ImportMany(typeof(HelloWorldContract),AllowRecomposition=true)] 2 private ObservableCollection<HelloWorldContract> pluginsHello = new ObservableCollection<HelloWorldContract>();

Con este atributo nos va a permitir cargar nuevos plugins en tiempo de ejecución y podremos comprobar con la propiedad NumCall  que aunque carguemos nuevos plugins en la colección no se crean nuevas instancias manteniendo los valores de las propiedades.

 

Download File – Código

Un comentario sobre “MEF y la Recomposición”

Deja un comentario

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