【问题标题】:How to get the class reference by a given string如何通过给定的字符串获取类引用
【发布时间】:2016-07-09 17:27:07
【问题描述】:

我正在开发某种调度程序,它从数据库中获取类的名称,然后执行该类的方法。

问题是,我无法获得对该类的引用。

我基本上想要什么:

    using MyNameSpace;
...
    Type myType = Type.GetType("MyNameSpace.MyClass");
    myInterface myObject = (myInterface)Activator.CreateInstance(myType);
    myObject.Run();

我知道我需要程序集名称,所以我尝试了这样的方法:

Type myType = typeof(object).Assembly.GetType("MyNameSpace.MyClass");

但类型始终为空。

想要的类在同一个解决方案中,但在另一个项目中。 如何获取引用,以便执行 run() 方法?

谢谢

【问题讨论】:

  • 你认为typeof(object).Assembly 是做什么的?它将返回mscorlib,而不是您引用的程序集。 mscorlib 不包含您的类型。使用程序集限定名称,请参阅duplicate
  • “重复”中的示例不起作用。它只适用于 System.String,但不适用于我自己的类:Type myType = Type.GetType("CSTurbo.AppWeb.Lib.Jobs.UpdateMetadataJob, AssemblyName");
  • 然后进一步点击一两个链接或尝试搜索更多:Type.GetType(“namespace.a.b.ClassName”) returns nullGet type in referenced assembly by supplying class name as string?。该类型不在该程序集中,或者该程序集未加载。这个问题已经被问过很多次了。
  • 抱歉重复。但我现在正在尝试和搜索三个小时......
  • 没问题,我的两个链接现在都解决了吗?如果没有,请edit 您的问题以显示您的项目结构(哪个项目包含哪些程序集和命名空间)以及您调用Type.GetType() 的准确程度,我很乐意重新打开。基本上这个问题是:Type.GetType() 适用于当前程序集(通常是程序集所在的代码)和 mscorlib,除非您指定程序集名称(最好是完全限定的)。当它仍然找不到您的类型时,程序集未加载或不包含该类型。

标签: c# string entity-framework .net-assembly class-reference


【解决方案1】:

试试这个 键入 myType = typeof(IMyInterface).Assembly.GetType("MyNameSpace.MyClass");

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2012-10-30
    • 2014-05-12
    • 2010-10-22
    相关资源
    最近更新 更多