March 2010 Blog Posts

MEF ed i Metadata

Alcune volte può capitare di dover associare delle informazioni agli export, per esempio specificare cosa ci offre una determinata implementazione di un contratto. Questo permette agli imports di sapere cosa offre un determinato componente/plugin e di utilizzare solo quelli che risolvono le nostre esigenze. MEF supporta due tipi di metadata: typed e non typed. Il post tratterà solo i metadata typed; per vedere un esempio di utilizzo dei non typed potete dare un’occhiata alla MEF Programming Guide. Ok ora possiamo partire a vedere qualcosa di concreto! Supponiamo di dover creare un plugin manager che ci permette di accedere...

MEF Recomposition

Il DirectoryWatcherCatalog introdotto in uno dei post precedenti ci introduce ad una caratteristica molto importante di MEF chiamata Recomposition. Che cos’è? La recomposition permette “a MEF” di aggiornare gli import quando vengono aggiunti nuovi export. Per cui nel caso del DirectoryWatcherCatalog quando aggiungiamo una dll all’interno della directory monitorata, la lista di plugins (definita di seguito) dovrebbe essere aggiornata automaticamente da MEF. 1: [ImportMany(typeof(IPlugin))] 2: public ObservableCollection<IPlugin> Plugins { get; set; } Dovrebbe?!? Si dovrebbe perchè quando...

InheritedExport

Leggendo qualche post qua e là e spulciando i sorgenti di MEF ho notato che oltre al classico ExportAttribute è presente anche InheritedExportAttribute! Qual è la differenza tra i due? Semplice! Con quest’ultimo possiamo decorare direttamente il nostro contratto 1: [InheritedExport] 2: public interface IPlugin 3: { 4: string Name { get; set; } 5: ...

Catalogs & DirectoryWatcherCatalog

Nella versione corrente (Preview 9), MEF ci mette a disposizione quattro Catalog per effettuare il discovery delle ComposablePart. AssemblyCatalog: effettua lo scan dell’assembly specificato TypeCatalog: effettua il discovery degli export dei tipi specificati DirectoryCatalog: effettua lo scan di tutti gli assembly presenti nella cartella specificata. Lo scan verrà eseguito solo una volta per cui se vengono aggiungi degli assembly nella directory il DirectoryCatalog non si accorgera’ di nulla. Se vogliamo rieffettuare lo scan basta...