Je développe un complément pour Microsoft Word. Dans mon complément, j'utilise une référence au fichier "Microsoft.Office.Interop.Word.dll" pour que je puisse utiliser des objets Word.Ajouter dynamiquement référence à mon projet
Dans le cas où la machine de développement a Word 2007 installé, le fichier à inclure dans les références est la version 12 en cas Word 2010 est installé, le fichier doit être la version 14.
Comment puis-je construire mon add dans et le faire fonctionner quelle que soit la version de Word installée sur la machine (en d'autres termes dire à mon application de détecter automatiquement quelle version de bureau est installée et d'utiliser automatiquement le fichier interop approprié)?
Pouvez-vous me donner un exemple de la façon dont le logiciel peut charger dynamiquement les liaisons d'implémentation par configuration? Dire par exemple je crée deux wrapper IOffice.Wrapper.12.dll (qui référencera le bureau 12) et IOffice, Wrapper.14.dll (qui référencera le bureau 14), puis-je encore installer les deux enveloppes ou un seul? – Zee99
@ Zee99: Vous pouvez mettre les deux fichiers dll sur l'ordinateur de l'utilisateur, et lorsque le programme est initialisé, vous ne pouvez charger que celui dont vous avez besoin. Une classe dans chaque assembly peut implémenter une interface "d'amorçage" en initialisant toutes vos classes d'usine. Lors de l'exécution, vous chargez la DLL et analysez l'assembly pour une classe qui implémente l'interface donnée. Ensuite, vous instanciez et exécutez cette classe particulière. Ainsi, lorsque votre code dit 'CopyPasteUtilFactory.Get()', vous obtenez un 'CopyPasteUtil' qui est implémenté dans' IOffice.Wrapper.XX.dll'. – StriplingWarrior
@ Zee99: Ou mieux encore, un framework DI comme Ninject s'occupera de la partie difficile. Vous venez d'inclure une ou plusieurs classes Module dans IOffice.Wrapper.XX.dll pour créer vos liaisons. Lorsque votre programme démarre, dites à Ninject de charger l'assemblage correct. Puis, à chaque fois que l'une de vos classes dépend d'un 'ICopyPasteUtil', l'implémentation correcte sera injectée dedans. – StriplingWarrior