2009-01-07 18 views
5

Comment créer une instance d'un objet lorsque le nom de classe est donné en tant que chaîne dans une application ASP.NET v2? Par exemple, j'ai une classe appelée SystemLog définie dans la section app_code de l'application. La classe est définie dans l'espace de noms Reports. Pour créer une instance de l'objet, je fais quelque chose comme ceci:Comment créer une instance d'une classe dans une application ASP.NET

Dim MyObject As New Global.Reports.SystemLog

Cependant, je veux créer cet objet en utilisant une chaîne pour définir le type. Le nom du type est stocké dans une base de données SQL en tant que chaîne. Je pense que c'est probablement quelque chose à faire avec Activator.CreateInstance (AssemblyName, TypeName) mais ce que je ne sais pas c'est ce qu'il faut passer dans ces chaînes. Quel est le nom d'assembly d'une application Web ASP.NET?

Aide!

Merci, Rob.

PS. Je ne veux pas d'instruction Select codée en dur :-)

+0

PS. La base de données/chaîne serait quelque chose comme "Reports.SystemLog" –

Répondre

5
string typeName = "Your Type Name Here"; 
Type t = Type.GetType(typeName); 
object o = Activator.CreateInstance(t); 

Cela vous donnera un type instancié. Si ce sera à vous de le mouler au bon type et appelez vos méthodes appropriées.

Si vous devez créer un type qui n'a pas de constructeur sans paramètre, il existe une surcharge sur CreateInstance qui prend un paramètre d'objets à transmettre à un constructeur. Plus d'informations à ce MSDN article.

0

Vous pouvez l'utiliser pour obtenir à partir d'un assemblage particulier:

Assemblée de l'Assemblée = Assembly.Load ("myAssembly");

Type ObjectType = assembly.GetType ("Entrez ici le nom");

puis ..... objet o = Activator.CreateInstance (ObjectType);

2

Ce qui suit est en mesure de créer un type, même si elle est d'un autre assemblage:

public object CreateInstance(string typeName) { 
    var type = AppDomain.CurrentDomain.GetAssemblies() 
       .SelectMany(a => a.GetTypes()) 
       .FirstOrDefault(t => t.FullName == typeName); 

    return type.CreateInstance(); 
} 
Questions connexes