10

这些是类似的问题:操作方法:在运行时使用 Silverlight 中的字符串从引用的程序集中加载类型,在引用的程序集中的类上的 GetType 失败,但两个答案都不起作用。

我有一个 MVC 项目,它从包含普通类型作为字符串的数据库中提取数据。这些类型在引用的程序集中,而不是在 MVC 项目中。

因此,例如,假设我的 Referenced Assembly Name 是MyFramework普通类型名称Car,完整的类型名称可以是MyFramework.Cars.CarorMyFramework.Vehicles.Cars.Car或其他一些变体。我所拥有的只是引用的程序集名称和纯类名作为字符串。无论完整类型名称如何,如何获取类型?

最后,我是否可以在引用的程序集中编写一个调用 GetType() 的函数并在 MvC 项目中使用它,以便我可以放弃包含程序集名称?我想删除知道程序集名称,所以我想我可以在引用的程序集中编写一个 Util,如:

namespace MyFramework //the referenced assembly
{
  public static class TypeUtil
  {
    public static Type GetFrameworkType(string typeName)
    {
        return Type.GetType(typeName);
    }
  }
}

然后在我的 MVC 项目中,我可以调用它而不需要将程序集作为字符串名称。这是可能的还是我总是需要程序集名称?

4

2 回答 2

27

也许当时没有加载引用的程序集。另外,我从您的问题中了解到,您没有完整的类型名称,只有类名称。
你应该尝试沿着这条线做一些事情:

Type type = Assembly.Load("YourAssemblyName").GetTypes().First(t => t.Name == "ShortTypeName");

希望我理解正确。

于 2012-08-16T19:32:04.063 回答
11

对于第一个问题,您可以执行类似的操作

Type t = AppDomain.CurrentDomain.GetAssemblies()
                                .Where(a => a.FullName == "MyFramework")
                                .SelectMany(a => a.GetTypes())
                                .FirstOrDefault(t => t.Name == "Car");

我不确定你说的第二个问题是什么意思。

于 2012-08-16T19:35:02.460 回答