【问题标题】:Extract type at runtime [duplicate]在运行时提取类型[重复]
【发布时间】:2015-07-01 06:58:42
【问题描述】:

我有一个类型名称作为输入传递。 “MyApp.Modules.Common.contact”。

使用Activator.CreateInstance 如何在我正在使用的方法中构造这种类型。 如果我这样做

Type typ = Type.GetType("MyApp.Modules.Common.contact")

类型始终为空。我该如何解决。请帮忙。

【问题讨论】:

  • 在哪里声明这个类型?可能在您需要这种类型的负载组件之前。还要检查类型名称是否有错字或类似
  • "如果调用GetType时程序集还没有保存到磁盘,则该方法返回null。",documentation的注释中还有很多其他原因,这些原因中的任何一个都适用?
  • 它在同一个程序集中吗?如果没有尝试:Type typ = Type.GetType("MyApp.Modules.Common.contact, "+assemblyName)

标签: c# .net reflection


【解决方案1】:

如果您只提供类型名称,Type.GetType 将在当前执行的程序集中查找,mscorlib - 仅此而已。如果您需要访问不同程序集中的类型,那么您也需要在类型中获取程序集名称,例如"MyApp.Modules.Common.contact, MyApp.Modules.Common"(如果程序集名称是 "MyApp.Modules.Common" - 或者如果您有 Assembly 引用,则可以使用 Assembly.GetType(string)

如果您没有关于应查看哪个程序集的信息,但您确信程序集已加载,您可以使用AppDomain.GetAssemblies() 查找程序集,然后查看依次通过每一个,调用Assembly.GetType,直到找到匹配项。

我鼓励您查看类型信息传递方式的设计 - 理想情况下,请确保程序集信息可用。

【讨论】:

  • 当我做 type.GetType(" MyApp.Modules.Common.contact") 它只返回一个 system.runtimetype
  • @Jayaraman:你的意思是Type.GetType?在这一点上真的不清楚你的意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
相关资源
最近更新 更多