MEF y RequiredCreationPolicy

En el anterior articulo vimos la recomposición y como aunque recargásemos los plugins con la opción Refresh se seguían manteniendo las instancias(lo comprobábamos con la propiedad NumCall) . Esto es debido a que sino especificamos nada las instancias de los plugins se crean con el patrón Singleton , es decir, una única instancia siempre. Este modelo de creación lo podemos cambiar con un atributo este es RequiredCreationPolicy el cual nos permite indicar el modelo de creación de nuestros plugins.

Este atributo es una enumeración con tres elementos

  • Shared: Especifica que solo va a existir una instancia (Singleton)
  • NonShared: Cada vez se creara una instancia del plugin
  • Any: Es por defecto y el importador decide cual es la política mejor entre las dos anteriores.

Si quisiéramos que cada vez se generase una instancia el código a modificar sería

 

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

De esta manera cuando demos al botón “Añadir Plugin” y detecte uno nuevo creara nuevas instancias reiniciando la propiedad NumCall. Este atributo es importante para que decidamos como queremos que se comporten los plugins. Además este atributo lo podemos poner a la hora de importar o exportar, es decir, en el propio plugin pero esta vez con el atributo PartCreationPolicy

1 [PartCreationPolicy(CreationPolicy.NonShared)] 2 [Export(typeof(HelloWorldContract))] 3 public class HolaMundo :HelloWorldContract 4 { 5

 

 

 

Deja un comentario

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