2010-05-12 4 views
1

Je travaille dans .Net 3.5, en examinant tous les différents constructeurs pour Activator.CreateInstance. Je veux créer une instance d'une classe, appelant un constructeur particulier. Je n'ai pas le type de classe, seulement son nom. J'ai ce qui suit, qui fonctionne, mais finit par appeler le constructeur sans paramètre d'abord, puis celui que je veux. Ce n'est pas un gros problème, mais le constructeur sans paramètre appelle un constructeur de base plutôt occupé, et le constructeur que je veux appeler le fait aussi. En d'autres termes, étant donné un type, appeler CreateInstance avec des paramètres est facile (seulement les deux dernières lignes ci-dessous), mais étant donné seulement un nom de type, y at-il un meilleur moyen?Activator.CreateInstance avec le nom de type comme chaîne et avec les paramètres

ObjectHandle oh = Activator.CreateInstance("MyDllName", "MyNS." + "MyClassName"); 
object o = oh.Unwrap(); 
object newObj = Activator.CreateInstance(o.GetType(), new object[] { param1 }); 
return (IMyDesiredObject)newObject; 

Merci!

Répondre

2

Vous pouvez utiliser cette surcharge de CreateInstance. Il vous permet de spécifier le type par nom (chaîne), ainsi que les arguments constructeurs (6ème paramètre).

+1

Merci, Reed - J'ai vu ce gars, mais je ne savais pas quoi faire avec ActivationAttributes et SecurityInfo. Les docs n'ont pas indiqué (comme avec Binder and Culture) qu'ils pourraient être nuls, mais il s'avère qu'ils le peuvent. Travaille pour moi! –

0

La façon dont j'ai pu obtenir ce travail était

Type type = BuildManager.GetType(ServiceRef + ".SDK",false); 

    Object nl = Activator.CreateInstance(type); 

Le BuildManager.GetType exige le nom de classe pleinement qualifié, dans votre cas c'est là que vous passeriez « monen. » + "MyClassName"

Questions connexes