En plus de créer une interface et de définir un point d'entrée unique pour votre nouvelle bibliothèque, vous pouvez créer un attribut qui identifie les classes que vous devez charger ou les méthodes que vous devez appeler. Vous utilisez ensuite la réflexion pour regarder toutes les DLL dans un certain chemin, et instancier/exécuter tout ce qui contient votre attribut.
J'ai créé une application similaire qui devait effectuer un certain nombre de vérifications de l'état de santé sur un système et qui devait être extensible. L'application a démarré, a parcouru toutes les DLL dans un chemin spécifié et pour chaque classe avec la décoration 'TestAttribute', elle créait une instance et exécutait la méthode 'Execute'. L'utilisation d'un attribut signifie que vous n'avez pas besoin de spécifier les DLL à traiter (pas besoin d'être dans config/database) car il est possible de traiter toutes les DLL en toute sécurité, et seules celles qui sont décorées avec l'attribut seront faire n'importe quoi.
Encore une fois, il y a des bibliothèques là-bas (j'ai mentionné MEF) qui implémente déjà une grande partie de cette plomberie. –
MEF semble intéressant mais n'est-ce pas exagéré? C'est un problème très simple. ma solution ici pourrait littéralement être juste 10 lignes pour une interface et 2 lignes pour une déclaration d'attribut. –
Vous devrez également implémenter le "look for dlls" ... dans des conditions générales comme celle-ci, j'ai tendance à chercher des bibliothèques plutôt que de rouler les miennes.Peut-être que MEF fait plus qu'absolument nécessaire dans ce cas, mais tout de même, il va résoudre le problème en cours avec encore moins de code que vous décrivez. –