J'ai implémenté un système 'plugin' dans lequel mon application crée des classes qui implémentent une interface lors de l'exécution pour permettre une fonctionnalité enfichable.Utiliser l'activateur est le meilleur moyen de créer des instances de classes avec plusieurs constructeurs?
J'y parviens en utilisant Activator.CreateInstance sur toutes les classes qui implémentent l'interface spécifiée dans l'assembly du plugin.
À l'heure actuelle je n'utilise une implémentation de la classe, et pour cela j'ai deux arguments du constructeur, et ont inclus ceux de l'appel Activator.CreateInstance:
instanceList.Add((Foo)Activator.CreateInstance(_TypeList[typeKey], new object[] { arg1, arg2 }));
Je sais que cela peut causer problèmes plus tard si une implémentation est ajoutée qui n'utilise pas cette signature constructeur. Quelle est la meilleure situation pour gérer cela.
Dites explicitement via la documentation que les constructeurs doivent utiliser cette signature, puis l'entourer dans un try/catch?
Ou y aurait-il un moyen d'invoquer n'importe quel constructeur d'une classe? En gardant à l'esprit que je devrais faire correspondre les arguments constructeurs en quelque sorte. Ou ... en évitant les arguments constructeurs en plaçant les arguments dans une classe statique en tant que propriétés statiques?