MEF (Managed Extensibility Framework) vs IoC / DI
-
01-07-2019 - |
Domanda
Quali problemi risolve MEF (Managed Extensibility Framework) che non possono essere risolti dai contenitori IoC / DI esistenti?
Soluzione
Lo scopo principale di MEF è l'estensibilità; fungere da framework di "plug-in" quando l'autore dell'applicazione e l'autore del plug-in ( estensione ) sono diversi e non si conoscono in modo particolare al di fuori di un'interfaccia pubblicata ( libreria contratto ).
Un altro spazio problematico che MEF affronta è diverso dai soliti sospetti IoC e uno dei punti di forza di MEF è la scoperta [estensione]. Ha molti meccanismi di scoperta estensibili che operano su metadati che è possibile associare alle estensioni. Dal sito MEF CodePlex:
" MEF consente di taggare le estensioni con metadati addizionali che facilitano l'interrogazione e il filtraggio avanzati "
Unito alla capacità di ritardare il caricamento delle estensioni con tag, la possibilità di interrogare i metadati delle estensioni precedenti al caricamento apre le porte a una serie di scenari interessanti e abilita sostanzialmente funzionalità come [plug-in] controllo delle versioni.
MEF ha anche "Adattatori di contratto" che consentono alle estensioni di essere "adattate" o "trasformate" ( dal tipo > al tipo ) con il controllo completo sui dettagli di tali trasformazioni. Gli adattatori di contratto aprono un altro fronte creativo relativamente a ciò che significa "scoperta" e implica.
Ancora una volta, l '"intento" di MEF è strettamente focalizzato sull'estensibilità anonima del plug-in, qualcosa che lo differenzia molto dagli altri contenitori IoC. Quindi, mentre MEF può essere usato per la composizione, è solo una piccola intersezione delle sue capacità rispetto ad altri IoC, con il quale sospetto che vedremo un sacco di giochi incestuosi andare avanti.
Altri suggerimenti
I contenitori IoC si concentrano su ciò che sai, cioè so che userò un logger in un Unit Test e un Logger diverso nella mia app. MEF si concentra su quelle cose che non fai, ci sono da 1 a n logger che possono apparire nel mio sistema.
Scott Hanselman e io abbiamo trattato questo argomento in modo più dettagliato nei recenti hanselminutes.