ExportFactory<T> è molto simile alla classe Lazy<T>, cambiano solo due cosucce:
- Quando accediamo alla proprietà Value di Lazy<T> l’istanza dell’oggetto che ci viene ritornato è sempre la stessa, per cui l’oggeto viene creata una sola volta. ExportFactory<T> al posto della proprietà Value ci mette a disposizione il metodo CreateExport() che ci ritorna ogni volta una nuova istanza.
- ExportFactory<T> è disponibile solo per Silverlight :)
E se lo volessimo usare in una Desktop Application?
E’ possibile scaricare MEF 2 Preview 1 da codeplex ed usare ExportFactory<T> tranquillamente nelle nostre applicazioni Desktop.
Una volta referenziato l’assembly System.ComponentModel.Composition.Codeplex.dll potete importare i vostri plugin usando ExportFactory<T> esattamente come Lazy<T>
Però, per accedere al plugin, non si userà più la proprietà Value come con Lazy<T> ma bensì il metodo CreateExport() che ritorna un ExportLifetimeContext<T> e tramite la proprietà Value possiamo accedere all’istanza del plugin. ExportLifetimeContext<T> inoltre implementa l’interfaccia IDisposable così da poter rilasciare la memoria quando la composable part (il nostro plugin) non ci serve più.
Come possiamo vedere i due Object ID sono differenti per cui le due istanze create da CreateExport() sono diverse!
posted @ lunedì 4 ottobre 2010 16:42