MEF

MEFedMVVM ed il concetto di Context (View) Aware

Nel caso avessimo bisogno di fare “qualcosa” con la UI, MEFedMVVM mette a disposizione del ViewModel il concetto di Context aware o meglio di View aware tramite l’interfaccia IContextAware. Se un ViewModel implementa questa interfaccia, MEFedMVVM richiamerà il metodo InjectContext, durante la composition, passandogli il contesto a cui è associato o meglio la View. MEFed ha già al suo interno un paio di servizi che implementano IContextAware come IContainerStatus che, tramite gli eventi ContainerLoaded e ContainerUnloaded, ci offre sostanzialmente un wrapper verso gli eventi Loaded e Unloaded di FrameworkElement, e IVisualStateManager che ci...

MEF for Real Business

Il 23 Febbraio avrò l’onore di tenere una sessione nella sede romana di DomusDotNet, dove vedremo un’introduzione a MEF con qualche caso d’uso reale e tanto tanto codice… e poi ovviamente ci sarà la consueta cena a cui non si può mancare Per iscrizioni e maggiori informazioni  vi rimando al post di Nicolò

MEFedMVVM Composition & IComposer

Piccola nota: prima di leggere questo post si consiglia di dare un occhio ai due precedenti http://blogs.ugidotnet.org/federicoD/archive/2010/09/09/mef-mvvm-mefedmvvm.aspx http://blogs.ugidotnet.org/federicoD/archive/2011/01/27/caricare-assembly-non-referenziati-con-mefedmvvm.aspx Chi ha già usato MEFedMVVM saprà benissimo che una volta dato un nome ai nostri ViewModel e, dopo aver specificato nelle View quale ViewModel ci serve, “qualcuno” si occuperà di far combaciare e funzionare tutto l’ambaradan. Questo “qualcuno” è il LocatorBootstrapper, che insieme agli IComposers si occuperà di effettuare la composition. In particolare IComposer si occupa di definire quali sono i Catalogs da usare, per cui dove MEF andrà a cercare ViewModel, Services, e via dicendo, e ci consente anche...

Caricare assembly non referenziati con MEFedMVVM

Supponiamo che… State sviluppando un’applicazione Desktop con WPF. State utilizzando il pattern MVVM. State usando MEFedMVVM (e se non lo state facendo dateci un occhio) per associare i ViewModel alle View e per disaccoppiare (in maniera semplice e veloce) i contratti dei vostri servizi dalle implementazioni. Quest’ultime stanno su un progetto che non referenziate, e che non volete referenziare, da nessuna parte…quindi MEFedMVVM non è assolutamente in grado di soddisfare la richiesta dell’implementazione di uno di questi servizi. Come risolviamo questo problema? Dando un occhio ai sorgenti di MEFedMVVM, si scopre che lui...

[MEF & AppDomain] Introduzione

Qualche tempo fa avevo “mostrato” che era possibile caricare dei plugin su un AppDomain secondario utilizzando MEF. Effettivamente è possibile l’unico (per modo di dire) problema è che dobbiamo riscriverci tutto il model di MEF… Quali sono le principali problematiche? 1) Dobbiamo utilizzare un altro modello ad attributi che non sia quello di MEF, per cui abbiamo bisogno di creare dei nuovi attributi con cui decorare i plugin 2) Il punto 1) comporta la scrittura di nuovi catalogs per effettuare il discovery delle ComposablePart che utilizzano i nuovi attributi 3) Ci serve un...

Recap Virtual Meeting MEF

Ieri sera ho tenuto il mio primo Virtual Meeting e devo dire che ero abbastanza in ansia che le cose non andassero bene... Fortunatamente è andato quasi tutto bene, l'unico problema è che non siamo riusciti a registrarlo, e c'era anche un buon numero di utenti. I feedback sono stati buoni per cui non posso che ringraziare le persone che mi hanno ascoltato per più di un'ora e che sono rimasti nonostante gli argomenti non fossero semplicissimi ed il mio passo abbastanza spedito. Se devo essere sincero, però, preferisco aver davanti un pubblico anche se la cosa può creare più ansia o più...

Test and Debugging MEF

Per chi vuole scrivere unit tests dei propri componenti o capire quali sono i principali errori che il processo di composition può dare, può leggere i post di Bnaya: http://blogs.microsoft.co.il/blogs/bnaya/archive/2010/07/09/testing-and-debugging-mef-tips-part-1.aspx http://blogs.microsoft.co.il/blogs/bnaya/archive/2010/10/12/testing-and-debugging-mef-tips-part-2.aspx oppure dare un’occhiata alla guida ufficiale: http://mef.codeplex.com/wikipage?title=Debugging%20and%20Diagnostics&referringTitle=Guide

Virtual Meeting MEF

Domani sera alle 21.30 ci sarà il Virtual Meeting organizzato da XeDotNet dove parlerò di: come creare un Plugin Manager per gestire più tipi di plugin ExportProvider MEFedMVVM Inoltre, se il tempo permette, parlerò di un progetto che ci permette di caricare plugin su un AppDomain secondario. Vi aspetto numerosi!!

MEF & AppDomains

Da un pò di tempo sto cercando di far caricare a MEF gli exports (plugins) in un AppDomain secondario (con tutti i pro e contro che questo comporta) e pian piano qualcosa sta venendo fuori... Stay tuned...

Filtering Exports with FilteredCatalog

MEFContrib è un progetto creato da Glenn Block ed altre persone note in cui inseriscono alcune chicche che possono essere utili quando si utilizza MEF ad esempio: 1) un catalog che supporta gli open generics (MEF di default supporta solo i closed generics) 2) un catalog che ci permette di filtrare gli exports 3) integrazione con Unity 4) un “botto” di cose che non ho la minima idea a cosa servano :) In questo post vedremo un esempio che mostra un utilizzo del FilteredCatalog! Scenario: Abbiamo un’interfaccia ILogger che rappresenta un logger generico che ci permette di loggare un...

ExportFactory for Desktop Applications

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...

MEF + MVVM = MEFedMVVM

MEFedMVVM è un framework sviluppato da Marlon Grech che utilizza MEF per comporre i ViewModel con le rispettive View, tenendovi però all’oscuro di tutta la parte di MEF. Una frase che mi è subito saltata all’occhio da uno dei tanti articoli di Marlon su MEFedMVVM è: One of the goals of MEFedMVVM  is to do all the MEF plumbing for you so that you can simple say “I want to Export this ViewModel” and then you can have a View that says “I would like that specific ViewModel” and BANG, MEFedMVVM will do all the plumbing by leveraging the Mighty MEF. MEFedMVVM...

MEF - Importing from XAML

Qualche settimana fa ho il letto il post di Bnaya Importing from Xaml e siccome la cosa mi ha incuriosito ho deciso di “espandere” la sua idea in maniera tale da poter importare da xaml i miei plugin. Però volevo anche non dipendere da un’interfaccia/contratto specifico così giocando un pò è uscita questa MarkupExtension: [MarkupExtensionReturnType(typeof(object))] public class MEFMarkupExtension : MarkupExtension { private Type contractType;   public MEFMarkupExtension(Type type) { this.contractType = type; this.Cardinality = ImportCardinality.ExactlyOne; }   ...

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...

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: ...

Introduzione a MEF

In questo periodo l’universita’ o meglio un suo laboratorio di ricerca mi ha dato l’opportunita’ (oltre che lo stimolo) di studiare MEF e le Parallel Extensions utilizzando il .NET 3.5, ed io ho colto la palla al balzo! Cosi’ ho deciso di scrivere una serie di post su MEF sperando che possano interessare a qualcuno. Di seguito trovate la lista dei post che seguiranno nelle prossime settimane: Introduzione a MEF Imports & Exports Catalogs Recomposition Metadata Internals? “Fluent Composition”? Cos’e’ MEF? ...