Managed Extensibility Framework (MEF)




1nn0vaLab
Managed Extensibility Framework (MEF)




1nn0vaLab
Managed Extensibility Framework (MEF)




            MEF è un framework che offre
            alle applicazioni la capacità di
              essere estese dinamicamente
            attraverso componenti esterni
                        noti solo a runtime




1nn0vaLab
for extension

              part / component



            for modification


1nn0vaLab
Managed Extensibility Framework (MEF)




              Export it
             Import it
            Compose it



1nn0vaLab
Managed Extensibility Framework (MEF)

                           Definiamo prima il
                           servizio (part) da esporre




               Utilizzare sempre le
               interfacce per definire i
               contratti da esportare
      Part A


1nn0vaLab
Managed Extensibility Framework (MEF)

                                  Definiamo prima il
                                  servizio (part) da esporre




 Dichiariamo
 l’implementazione da
 rendere disponibile ai
 consumer




      Part A


1nn0vaLab
Managed Extensibility Framework (MEF)




     Definiamo nel
     consumer il “punto
     di estensione”




      Part A


1nn0vaLab
Managed Extensibility Framework (MEF)




            Dove cerca MEF le
            parti da utilizzare?        TypeCatalog
                                        AssemblyCatalog
                Catalog
                                        DirectoryCatalog

                                        AggregateCatalog



1nn0vaLab
Managed Extensibility Framework (MEF)




                                      Come risolve i collegamenti
                                      import/export?
            Dove cerca MEF le
            parti da utilizzare?

                                          Container




1nn0vaLab
It’s DEMO
    time!
Managed Extensibility Framework (MEF)


 MEF architecture




1nn0vaLab
Managed Extensibility Framework (MEF)




     Part by discovery    Part by registration

                          External configuration,
     NO configuration
                          via Fluent API or XML

     Wiring in the part   Auto Wiring

     Almost pure POCO     Pure POCO


1nn0vaLab
Managed Extensibility Framework (MEF)




            • Metadata support
            • Be “lazy”
            • Recomposition


1nn0vaLab
Managed Extensibility Framework (MEF)




                    Possiamo associare al servizio
            informazioni aggiuntive (metadati) in
             modo da farle leggere ai consumer ...



    ... per esempio per filtrare
    le implementazioni da
    importare

1nn0vaLab
Managed Extensibility Framework (MEF)




    ... per esempio per filtrare
    le implementazioni da
    importare

1nn0vaLab
Managed Extensibility Framework (MEF)




            Eseguire l’importazione solo nel
            momento in cui viene utilizzata!



    Lazy<T,M> (con M metadata) è utile
    per filtrare le importazioni in base ai
    metadati


1nn0vaLab
Managed Extensibility Framework (MEF)




                  Con MEF possiamo avere la
     ricomposizione automatica delle parti in
         caso di aggiunta di nuove estensioni
               (o rimozione di una esistente)

            [ImportMany(AllowRecomposition(true)]

                            +
               IPartImportsSatisfiedNotification

1nn0vaLab
Managed Extensibility Framework (MEF)




            Dynamically loading XAPs with MEF
            http://channel9.msdn.com/Shows/SilverlightTV/Silverlight
            -TV-11-Dynamically-Loading-XAPs-with-MEF



1nn0vaLab
Managed Extensibility Framework (MEF)


 Resources
             Project hosting on codeplex
             http://mef.codeplex.com

             Community-developed library of
             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/


1nn0vaLab
Credits
Le immagini contenute in questa presentazione
eccetto la foto iniziale acquistata su
iStockPhoto hanno licenza Creative Commons

Slide 2 : http://www.flickr.com/photos/69691418@N00/4368951793/
Slide 3 : http://www.flickr.com/photos/16013376@N00/4562002778/
Thank You!   MANUEL SCAPOLAN
             website: www.manuelscapolan.it
             twitter: manuelscapolan
             e-mail: info@manuelscapolan.it




                                              23

Managed Extensibility Framework (MEF)

  • 2.
  • 3.
  • 4.
    Managed Extensibility Framework(MEF) MEF è un framework che offre alle applicazioni la capacità di essere estese dinamicamente attraverso componenti esterni noti solo a runtime 1nn0vaLab
  • 5.
    for extension part / component for modification 1nn0vaLab
  • 6.
    Managed Extensibility Framework(MEF) Export it Import it Compose it 1nn0vaLab
  • 7.
    Managed Extensibility Framework(MEF) Definiamo prima il servizio (part) da esporre Utilizzare sempre le interfacce per definire i contratti da esportare Part A 1nn0vaLab
  • 8.
    Managed Extensibility Framework(MEF) Definiamo prima il servizio (part) da esporre Dichiariamo l’implementazione da rendere disponibile ai consumer Part A 1nn0vaLab
  • 9.
    Managed Extensibility Framework(MEF) Definiamo nel consumer il “punto di estensione” Part A 1nn0vaLab
  • 10.
    Managed Extensibility Framework(MEF) Dove cerca MEF le parti da utilizzare? TypeCatalog AssemblyCatalog Catalog DirectoryCatalog AggregateCatalog 1nn0vaLab
  • 11.
    Managed Extensibility Framework(MEF) Come risolve i collegamenti import/export? Dove cerca MEF le parti da utilizzare? Container 1nn0vaLab
  • 12.
  • 13.
    Managed Extensibility Framework(MEF) MEF architecture 1nn0vaLab
  • 14.
    Managed Extensibility Framework(MEF) Part by discovery Part by registration External configuration, NO configuration via Fluent API or XML Wiring in the part Auto Wiring Almost pure POCO Pure POCO 1nn0vaLab
  • 15.
    Managed Extensibility Framework(MEF) • Metadata support • Be “lazy” • Recomposition 1nn0vaLab
  • 16.
    Managed Extensibility Framework(MEF) Possiamo associare al servizio informazioni aggiuntive (metadati) in modo da farle leggere ai consumer ... ... per esempio per filtrare le implementazioni da importare 1nn0vaLab
  • 17.
    Managed Extensibility Framework(MEF) ... per esempio per filtrare le implementazioni da importare 1nn0vaLab
  • 18.
    Managed Extensibility Framework(MEF) Eseguire l’importazione solo nel momento in cui viene utilizzata! Lazy<T,M> (con M metadata) è utile per filtrare le importazioni in base ai metadati 1nn0vaLab
  • 19.
    Managed Extensibility Framework(MEF) Con MEF possiamo avere la ricomposizione automatica delle parti in caso di aggiunta di nuove estensioni (o rimozione di una esistente) [ImportMany(AllowRecomposition(true)] + IPartImportsSatisfiedNotification 1nn0vaLab
  • 20.
    Managed Extensibility Framework(MEF) Dynamically loading XAPs with MEF http://channel9.msdn.com/Shows/SilverlightTV/Silverlight -TV-11-Dynamically-Loading-XAPs-with-MEF 1nn0vaLab
  • 21.
    Managed Extensibility Framework(MEF) Resources Project hosting on codeplex http://mef.codeplex.com Community-developed library of 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/ 1nn0vaLab
  • 22.
    Credits Le immagini contenutein questa presentazione eccetto la foto iniziale acquistata su iStockPhoto hanno licenza Creative Commons Slide 2 : http://www.flickr.com/photos/69691418@N00/4368951793/ Slide 3 : http://www.flickr.com/photos/16013376@N00/4562002778/
  • 23.
    Thank You! MANUEL SCAPOLAN website: www.manuelscapolan.it twitter: manuelscapolan e-mail: info@manuelscapolan.it 23