ManagedExtensibilityFramework(MEF)
1nn0vaLab
MEF è un framework cheoffre
alleapplicazionila capacitàdi
essereestesedinamicamente
attraversocomponentiesterni
notisolo a runtime
formodification
forextension
1nn0vaLab
part / component
ManagedExtensibilityFramework(MEF)
1nn0vaLab
Part A
Definiamo prima il
servizio (part) da esporre
Utilizzare sempre le
interfacce per definire i
contratti da esportare
ManagedExtensibilityFramework(MEF)
1nn0vaLab
Part A
Definiamo prima il
servizio (part) da esporre
Dichiariamo
l’implementazione da
rendere disponibileai
consumer
ManagedExtensibilityFramework(MEF)
1nn0vaLab
Part A
Definiamo nel
consumer il “punto
di estensione”
ManagedExtensibilityFramework(MEF)
1nn0vaLab
Catalog
Dove cerca MEF le
parti da utilizzare? TypeCatalog
DirectoryCatalog
AssemblyCatalog
AggregateCatalog
ManagedExtensibilityFramework(MEF)
1nn0vaLab
Dove cerca MEF le
parti da utilizzare?
Come risolve i collegamenti
import/export?
Container
ManagedExtensibilityFramework(MEF)
1nn0vaLab
Part bydiscovery
NO configuration
Wiringin the part
Almostpure POCO
Part byregistration
Externalconfiguration,
via FluentAPI or XML
Auto Wiring
Pure POCO
ManagedExtensibilityFramework(MEF)
1nn0vaLab
•Metadata support
•Be “lazy”
•Recomposition
ManagedExtensibilityFramework(MEF)
1nn0vaLab
Possiamoassociareal servizio
informazioniaggiuntive(metadati) in
mododafarleleggereaiconsumer ...
... per esempioper filtrare
le implementazionida
importare
ManagedExtensibilityFramework(MEF)
1nn0vaLab
... per esempioper filtrare
le implementazionida
importare
ManagedExtensibilityFramework(MEF)
1nn0vaLab
Eseguirel’importazionesolo nel
momentoin cui vieneutilizzata!
Lazy<T,M> (con M metadata) è utile
per filtrarele importazioniin base ai
metadati
ManagedExtensibilityFramework(MEF)
1nn0vaLab
Con MEF possiamoaverela
ricomposizioneautomaticadellepartiin
casodiaggiuntadinuoveestensioni
(o rimozionediunaesistente)
[ImportMany(AllowRecomposition(true)]
IPartImportsSatisfiedNotification
+
ManagedExtensibilityFramework(MEF)
Resources
1nn0vaLab
Project hosting on codeplex
http://mef.codeplex.com
Community-developedlibraryof
extensions
http://mefcontrib.codeplex.com/
Hamilton Verissimo (the “MEF man”)
http://blogs.msdn.com/b/hammett/
Glenn Block (the “MEF maniac”)
http://codebetter.com/glennblock/
Slide 2 : http://www.flickr.com/photos/69691418@N00/4368951793/
Slide 3 : http://www.flickr.com/photos/16013376@N00/4562002778/
Credits
Le immagini contenute in questa presentazione
eccetto la foto iniziale acquistata su
iStockPhotohanno licenza Creative Commons