dimanche 1 mars 2009 21:13
tja
[.NET 4.0] Présentation de MEF: Managed Extensibility Framework
Framework MEF. Qu'est-ce que c'est ?
MEF, Managed Extensibility Framework sera disponible dans la nouvelle plateforme Microsoft .NET 4.0. D'après ce que nous pouvons lire sur le site officiel CodePlex, MEF permet de créer très simplement les applications extensibles et garanti ainsi une meilleure réutilisation de vos applications et vos composants. MEF met l'accent sur la découverte de composants que nous ne connaissons pas à l'avance lors de l'exécution.
A l'heure actuelle, MEF est en phase de développement mais si vous voulez jouer avec, vous pouvez télécharger la Preview 4 de MEF ici.
A quoi sert MEF?
MEF apporte aux applications une solution d'extensibilité à l'exécution. Jusqu'à maintenant, si nous voulions concevoir une application extensible par plugin, nous avions 2 approches :
- Développer notre propre infrastructure d'extension depuis le début. Le problème de cette infrastructure est que bien souvent celle-ci est spécifique à une application et très difficile à utiliser dans d'autres implémentations.
- Utiliser un framework générique System.Addin (MAF Managed Addin Framework) qui est apparu avec l'arrivée du .NET 3.5 fin 2007. C'est un système d'extensibilité basé sur les Addins (plugins) par la mise en place des contrats entre l'application hôte et les addins.
Les principales fonctionnalités de MEF sont:
- L'application host peut exposer aux composants ses propres fonctionnalités et consumer les fonctionnalités liées aux composants externes. Si les composants que vous utilisez sont liés ensemble, MEF se charge de les connecter ensemble dans l'ordre. Vous pouvez par exemple exposer dans l'application host les méthodes pour inscrire des logs. Ensuite les composants peuvent utiliser ces méthodes ce qui évite de créer un loggeur par chaque composant.
- Grâce à des fonctions de découverte, MEF localise et charge les extensions pour votre application.
- MEF vous permet de marquer (tagger) vos extensions avec les metadatas qui facilitent la recherche. Les tags permettrons de mieux voir et rechercher les fonctions et méthodes exposés par le host, et vice-versa.
Comment fonctionne MEF ?
MEF n'est pas seulement un simple framework d'extension. MEF permet aussi d'utiliser les fonctionnalités d'IoC (Inversion of Control, Inversion de contrôle) et d'injection de dépendance comme Unity par exemple. En bref, MEF est constitué d'un catalogue et des containeurs (CompositionContainer). Le catalogue à la responsabilité de découvrir les extensions et les containeurs coordonnent la création des dépendances.
MEF offre un mécanisme d'import/export très astucieux. Afin d'exposer aux composant les fonctionnalités, il suffit de marquer vos classes, méthodes ou propriétés dans l'hôte par l'attribut Export et à l'inverse, si vous voulez étendre les fonctionnalités de l'hôte, vous devez utiliser l'attribut Import pour importer vos classes, méthodes ou propriétés. Comment tout cela fonctionne (d'après ce que nous pouvons lire sur le site officiel) ? :
- L'élément de base de MEF est ComposablePart qui offre un ou plusieurs Exports et qui peut aussi dépendre d'un ou des plusieurs Imports. Cet élément gère aussi une instance qui peut être une instance d'objet d'un type particulier (cela dépend de ce que vous avez marqué avec l'attribut Import/Export). Vous pouvez aussi étendre ComposablePart du moment où il respecte le contrat d'Import/Export.
- Les Imports et les Exports implément un Contrat. Les contrats sont les ponts entre les imports et les exports. Les metadata indiquent les fonctionnalités qu'un Import/Export peut offrir.
- Les containeurs intéragissent avec les Catalogues ce qui leur donne accès aux différentes ComposableParts. Le containeur résout les dépendances et expose les Export au monde extérieur.
- L'élément ComposablePart retourné par le catalogue est une extension à votre application, peut contenir des dépendances sur d'autres compsants (Import) et peut également fournir les fonctionnalités aux autres composants (Export).
- Les imports et les exports utilisent un mécanisme d'attributs avec lesquels vous pouvez marquer vos classes, méthodes ou propriétés.
Voici le schéma de l'architecture du MEF (CodePlex):

Conclusion
Comme vous pouvez le constater, MEF est un framework dont la fonctionnalité principale est la découverte des composants qu'on ne connait pas à l'avance lors de l'exécution. Cela permet de concevoir une application extensible mais aussi optimisée (si on utilise les fonctionnalités d'IoC qui ne sont pas traitées par System.Addin du framework 3.5) Dans les prochains posts, je vais passer progressivement à la pratique. Je voudrais démontrer la réelle utilité de ce framework dans l'architecture des applications .NET.
En attendant, bonne programmation 
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :