在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语句: - )
答案 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);