【发布时间】: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 null、Get type in referenced assembly by supplying class name as string?。该类型不在该程序集中,或者该程序集未加载。这个问题已经被问过很多次了。
-
抱歉重复。但我现在正在尝试和搜索三个小时......
-
没问题,我的两个链接现在都解决了吗?如果没有,请edit 您的问题以显示您的项目结构(哪个项目包含哪些程序集和命名空间)以及您调用
Type.GetType()的准确程度,我很乐意重新打开。基本上这个问题是:Type.GetType()适用于当前程序集(通常是程序集所在的代码)和mscorlib,除非您指定程序集名称(最好是完全限定的)。当它仍然找不到您的类型时,程序集未加载或不包含该类型。
标签: c# string entity-framework .net-assembly class-reference