如何在ASP.NET应用程序中创建类的实例

时间:2009-01-07 23:05:34

标签: asp.net reflection

在ASP.NET v2应用程序中将类名称作为字符串时,如何创建对象实例?例如,我在应用程序的app_code部分中定义了一个名为SystemLog的类。该类在Reports命名空间中定义。要创建对象的实例,我会这样做:

Dim MyObject As New Global.Reports.SystemLog

但是,我想使用字符串来创建此对象以定义类型。类型名称作为字符串存储在SQL数据库中。我认为这可能与Activator.CreateInstance(AssemblyName,TypeName)有关,但我不知道的是传递这些字符串的内容。什么是ASP.NET Web应用程序的程序集名称?

帮助!

谢谢,Rob。

PS。我不想要硬编码的Select语句: - )

3 个答案:

答案 0 :(得分:5)

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

这会给你一个instanciated类型。如果由您决定将其转换为正确的类型并调用适当的方法。

如果需要创建一个没有无参数构造函数的类型,CreateInstance上会有一个重载,它会将一对对象传递给构造函数。有关此MSDN article的更多信息。

答案 1 :(得分:2)

以下内容可以创建类型,即使它来自另一个程序集:

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

   return type.CreateInstance();
}

答案 2 :(得分:0)

您可以使用它从特定程序集中获取它:

装配程序集= Assembly.Load(“myAssembly”);

输入ObjectType = assembly.GetType(“在此输入名称”);

然后.....对象o = Activator.CreateInstance(ObjectType);