Les implémentations de l'interface par le biais de la Réflexion
Comment puis-je obtenir toutes les implémentations de l'interface par le biais de la réflexion en C#?
- Question connexe: stackoverflow.com/questions/5849210/...
Vous devez vous connecter pour publier un commentaire.
La réponse est celle-ci; il recherche à travers l'ensemble du domaine d'application -- qui est, à chaque assemblée est actuellement chargé par votre application.
Il est utilisé comme cela;
Vous pouvez également cette fonction pour rechercher la réelle types de béton -- c'est à dire, en filtrant les résumés, les interfaces et les génériques des définitions de type.
IsRealClass
àreturn !(testType.IsAbstract || testType.IsGenericTypeDefinition || testType.IsInterface);
Ont un coup d'oeil à
Assembly.GetTypes()
méthode. Elle retourne tous les types qui peuvent être trouvés dans une assemblée. Tout ce que vous avez à faire est de parcourir chaque type retourné et vérifier si elle implémente l'interface nécessaire.Sur la façon de le faire est d'utiliser
Type.IsAssignableFrom
méthode.Ici est l'exemple.
myInterface
est l'interface, les implémentations de qui vous êtes la recherche pour.Je crois qu'il n'est pas un moyen très efficace pour résoudre votre problème, mais au moins, c'est un bon endroit pour commencer.
Peut-être quelque chose comme ça....
Voici quelques
Type
des méthodes d'extension qui peut être utile pour cela, comme l'a suggéré Simon Farrow. Ce code est juste une restructuration de la accepté de répondre.Code
Exemples
Pour obtenir le instanciables réalisateurs dans la convocation de l'assemblée:
Pour obtenir les réalisateurs dans l'actuel domaine d'application:
Voulez-vous dire toutes les interfaces d'un Type implémente?
Comme ceci:
Espère tha helpts.
Vous devez faire une boucle sur tous les assemblys qui vous intéresse. De l'assemblée, vous pouvez obtenir tous les types qu'il définit. Notez que lorsque vous faites de l'AppDomain.CurrentDomain.Assemblées les assemblées qui sont chargés. Les assemblées ne sont pas chargés jusqu'à ce qu'ils sont nécessaires, ce qui signifie que vous devez charger explicitement les assemblées avant de lancer la recherche.