2009-01-07 17 views
5

¿Cómo se puede crear una instancia de un objeto cuando se le da el nombre de clase como una cadena en una aplicación ASP.NET v2? Por ejemplo, tengo una clase llamada SystemLog definida en la sección app_code de la aplicación. La clase se define dentro del espacio de nombres de Informes. Para crear una instancia del objeto, hago algo como esto:¿Cómo creo una instancia de una clase en una aplicación ASP.NET?

Dim MiObjeto Como Nueva Global.Reports.SystemLog

Sin embargo, quiero crear este objeto mediante una cadena para definir el tipo. El nombre del tipo se almacena en una base de datos SQL como una cadena. Creo que probablemente tenga algo que ver con Activator.CreateInstance (AssemblyName, TypeName) pero lo que no sé es qué pasar en esas cadenas. ¿Cuál es el nombre del ensamblado de una aplicación web ASP.NET?

¡Ayuda!

Gracias, Rob.

PS. No quiero un código fijo Seleccionar instrucción :-)

+0

PS. La base de datos/cadena sería algo así como "Reports.SystemLog" –

Respuesta

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

Esto le dará un tipo instanciado. Depende de ti el lanzarlo al tipo correcto y llamar a tus métodos apropiados.

Si necesita crear un tipo que no tenga un constructor sin parámetros, hay una sobrecarga en CreateInstance que toma un parametro de objetos para pasar a un constructor. Más información en este MSDN article.

0

Usted puede usar esto para obtener de un montaje especial:

montaje Asamblea Assembly.Load = ("myAssembly");

Tipo ObjectType = assembly.GetType ("Escriba el nombre aquí");

then ..... object o = Activator.CreateInstance (ObjectType);

2

El siguiente es capaz de crear el tipo, incluso si es de otro montaje:

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

    return type.CreateInstance(); 
} 
Cuestiones relacionadas