2010-06-18 3 views
2

J'ai quelques classes dans la bibliothèque de classes (assemblage séparé). Je l'ai référencé à mon projet et je veux initialiser une classe spécifique de cette bibliothèque. Je ne connais que son nom. Toutes les classes implémente une interface. Et voici le problème.Comment initialiser une classe à partir d'une bibliothèque?

Mon code à ce jour:

using MyLibrary; 
... 
IMyInterface dll = Activator.CreateInstance("MyLibrary", "MyLibrary.NameOfClass") as IMyInterface; 

Mais dll est toujours nulle. Des idées?

Merci

MISE À JOUR

-je supprimer la référence à la bibliothèque et à réécrire ce code:

Assembly a = Assembly.Load("MyLibrary"); 
Type type = a.GetType("MyLibrary.SKClass"); 
IMyInterface obj = Activator.CreateInstance(type) as IMyInterface; 

mais obj est nulle.

Si j'ai vérifié les types de bibliothèques avec un .GetExportedTypes(), SKClass est là. Alors, pourquoi ce code renvoie-t-il toujours une valeur nulle?

+0

essayer sans « comme » essayer « Activator.CreateInstance (» MyLibrary », « NameOfClass ») sans –

+0

« dans le cadre », il renvoie une erreur si un casting est manquant. – daemon

Répondre

2
var assembly = Assembly.LoadFile(@"full\path\to.dll"); 

var type = assembly.GetType("Full.Namespace.Type"); 

var object = Activator.CreateInstance(type); 
+0

grâce il fonctionne. – daemon

0

Pourquoi n'utilisez-vous pas ...?

Assemblage a = Assembly.Load ("ClassLibrary1"); Interface1 i = a.CreateInstance ("ClassLibrary1.ClassName") en tant qu'Interface1;

Est-il nécessaire d'utiliser Activator ...?

Questions connexes