【问题标题】:How do I create an instance of a class in an ASP.NET application如何在 ASP.NET 应用程序中创建类的实例
【发布时间】:2009-01-07 23:05:33
【问题描述】:

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

将 MyObject 调暗为新的 Global.Reports.SystemLog

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

救命!

谢谢,罗伯。

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

【问题讨论】:

  • 附言。数据库/字符串类似于“Reports.SystemLog”

标签: asp.net reflection


【解决方案1】:
string typeName = "Your Type Name Here";
Type t = Type.GetType(typeName);
object o = Activator.CreateInstance(t);

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      Assembly 程序集 = Assembly.Load("myAssembly");

      Type ObjectType = assembly.GetType("此处输入名称");

      然后.....object o = Activator.CreateInstance(ObjectType);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-17
        • 1970-01-01
        • 2023-03-26
        • 2023-03-30
        相关资源
        最近更新 更多