Quels problèmes le MEF (Managed Extensibility Framework) résout-il qui ne peuvent pas être résolus par les conteneurs IoC/DI existants ?
Réponses
Trop de publicités?L'objectif principal du MEF est l'extensibilité ; il s'agit de servir de cadre de "plug-in" lorsque l'auteur de l'application et l'auteur du plug-in ( extension ) sont différents et n'ont aucune connaissance particulière les uns des autres au-delà d'une interface publiée ( contrat ) de la bibliothèque.
Un autre espace de problème que le MEF aborde et qui est différent des suspects habituels de l'IoC, et l'une des forces du MEF, est la découverte [d'extension]. Il dispose de nombreux mécanismes de découverte extensibles qui fonctionnent sur les métadonnées que vous pouvez associer aux extensions. Extrait du site MEF CodePlex :
"Le MEF permet d'étiqueter les extensions avec des métadonnées supplémentaires, ce qui facilite l'interrogation et le filtrage riches".
Combiné à la possibilité de retarder le chargement des extensions balisées, le fait de pouvoir interroger les métadonnées des extensions avant pour le chargement ouvre la porte à toute une série de scénarios intéressants et permet des fonctionnalités telles que le versioning [plug-in].
Le MEF dispose également d'adaptateurs de contrats qui permettent d'adapter ou de transformer les extensions ( de type > à type ) avec un contrôle total sur les détails de ces transformations. Les adaptateurs de contrat ouvrent un autre front créatif en ce qui concerne la signification et les implications de la "découverte".
Encore une fois, l'"intention" de MEF est étroitement axée sur l'extensibilité des plug-ins anonymes, ce qui le différencie fortement des autres conteneurs IoC. Ainsi, si le MEF peut être utilisé pour la composition, ce n'est qu'une petite intersection de ses capacités par rapport aux autres IoC, avec lesquels je pense que nous verrons beaucoup d'interactions incestueuses à l'avenir.
Les conteneurs IoC se concentrent sur les choses que vous connaissez, c'est-à-dire que je sais que je vais utiliser un logger dans un test unitaire et un autre logger dans mon application. MEF se concentre sur les choses que vous ne connaissez pas, il y a 1 à n loggers qui peuvent apparaître dans mon système.