J'ai utilisé le conteneur IoC de Windsor pour mon application Web afin de résoudre l'implémentation de la couche d'accès aux données que l'application doit utiliser.MEF: Où dois-je mettre le CompositionContainer?
L'interface utilisateur de l'application Web sera composée de pages et chaque page se compose de petites unités appelées portlets. (Leur concept est quelque peu similaire aux widgets.) Ces soi-disant portlets sont essentiellement des contrôles web et peuvent être configurés en runtime pour chaque page de façon individuelle.
L'application sera livrée avec certains de ces intégrés, mais je voudrais permettre de l'étendre facilement.
J'ai compris que ce mécanisme est exactement ce à quoi est destiné le MEF. J'ai donc décidé d'implémenter le système de telle manière qu'il découvre les portlets en utilisant MEF. Puis, j'ai réalisé qu'il pouvait aussi faire ce que j'utilise actuellement pour Windsor, alors j'ai décidé de laisser tomber Windsor en faveur de MEF.
De toute évidence, je vais devoir utiliser DirectoryCatalog, qui analyse les fichiers .dll dans le dossier bin de l'application et retourne tout ce dont j'ai besoin. J'ai également lu des tutoriels, des exemples et toutes les questions concernant MEF dans StackOverflow. Je me suis dit que le moyen le plus simple d'utiliser MEF est le PartInitializer que Glenn Block a mentionné dans ses tutoriels, mais j'ai réalisé que ce n'est pas dans MEF. En fait, c'est dans le code que j'ai téléchargé à partir de CodePlex, mais dans un assembly séparé, et seulement dans la source, pas sous forme binaire. (Cela signifie-t-il que cela ne fait pas partie du MEF?) A quoi cela sert-il de le mettre dans un projet séparé?) Ensuite, j'ai réalisé que c'était pour Silverlight, donc ça ne m'aide pas vraiment. (Ou devrais-je juste compiler cela avec .NET 3.5, ou l'inclure dans mon projet, et je suis bon à aller?)
Donc maintenant j'ai un problème qui est le suivant: où devrais-je mettre le CompositionContainer dans ma demande?
Il y a une autre chose que je voudrais considérer: devrais-je utiliser seulement un CompositionContainer dans la vie de l'application, ou je ferais mieux de créer un conteneur pour chaque fois que j'en ai besoin?