3 votes

Comment appeler une fonction dans une dll .net via une interface chargée par réflexion ?

Bonjour, je vais faire de mon mieux pour expliquer cela.

En fait, je charge une bibliothèque par réflexion en utilisant la fonction Assembly.LoadFile.

À partir de là, j'ai une interface IFace qui définit une méthode "GetStrings" qui renvoie un tableau de chaînes de caractères.

La DLL chargée dynamiquement possède une classe nommée "Class1" qui implémente IFace.

J'ai besoin d'un moyen d'appeler cette méthode interfacée par le biais de la bibliothèque chargée dynamiquement. J'aimerais conserver un couplage étroit, ce qui m'amène à me demander ce qu'il faut faire. Je sais que je peux utiliser MethodInvoker pour appeler la méthode, mais j'essaie de trouver un moyen de faire quelque chose comme ceci :

IFace obj = (IFace)ReflectionAssembly.Class1;
string[] strs = obj.GetStrings();

Des idées ?

6voto

Wayne Points 3098

Quelque chose comme :

    var assm = Assembly.Load("ClassLibrary1");
    var type = assm.GetType("ClassLibrary1.Class1");
    var instance = Activator.CreateInstance(type) as IFace;
    string[] strings = instance.GetStrings();

2voto

Hans Passant Points 475940

Utilisez Assembly.CreateInstance() pour créer l'objet, passez-lui un "nom connu". Transformez la valeur de retour en IFace, le reste est facile. Oh, n'utilisez pas LoadFile, utilisez LoadFrom.

1voto

Reed Copsey Points 315315

Une fois que vous avez le type via Reflection (en utilisant quelque chose comme Assemblée.GetType ), vous pouvez utiliser Activator.CreateInstance :

IFace obj = (IFace)Activator.CreateInstance(class1Type);
string[] strs = obj.GetStrings();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X