2010-03-28 10 views
3

A partir du code managé, comment charger un type managé à partir d'un autre assembly à l'exécution, en supposant que le code appelant n'a pas de référence statique à l'assembly? Pour clarifier, disons que j'ai la classe Lib dans Lib.cs compilée dans Lib.dll. Je veux écrire un Foo de classe dans un assembly séparé appelé Foo.dll, qui n'a pas une référence à Lib.dll statiquement, mais charge à la place Lib.dll, puis réfléchit sur la présence de la classe Lib puis appelle une méthode dessus.Charger dynamiquement un type à partir d'un assembly externe

Désolé pour une question aussi évidente sur Reflection. Je pense qu'il faudra beaucoup moins de temps pour obtenir la réponse sur un forum que de lire quelques articles.

Répondre

4

Voici un court extrait:

Assembly assembly = Assembly.LoadFile("Lib.dll"); 
ILib lib = (ILib)assembly.CreateInstance("Lib"); 
lib.doSomething(); 

Bien sûr, la classe Lib doit implémenter l'interface ILIB qui doit être accessible à la fois de Foo.dll et Lib.dll. De cette façon, vous réalisez l'abstraction.

+0

Merci, Petar. C'est un assez bon début pour moi. Je raffermis mes pensées sur un design et je n'ai pas encore décidé si je veux que l'appelant ait le contrat ou utilise MethodInfo [] pour réfléchir sur la vtable de l'objet appelé. Merci encore. –

+0

Vous êtes les bienvenus :) –

Questions connexes