2009-01-07 73 views
5

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

昏暗的MyObject作为新Global.Reports.SystemLog

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

帮助!

谢谢,罗布。

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

+0

PS。数据库/字符串会像“Reports.SystemLog” – 2009-01-07 23:06:06

回答

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

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

如果您需要创建一个没有无参数构造函数的类型,那么CreateInstance会有一个重载,该重载需要传递一个对象参数给构造函数。更多信息请点击此处MSDN article

0

您可以用它来从一个特定的组件得到它:

大会总成= Assembly.Load( “MyAssembly程序”);

类型ObjectType = assembly.GetType(“Type name here”);

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

2

以下是能够创造型,即使它从另一个大会:

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

    return type.CreateInstance(); 
} 
相关问题