繁体   English   中英

通过将类名作为字符串提供来获取引用程序集中的类型?

[英]Get type in referenced assembly by supplying class name as string?

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

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

因此,例如,假设我的引用程序集名称是MyFramework和普通类型名称Car ,完整类型名称可以是MyFramework.Cars.CarMyFramework.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 项目中我可以调用它而不需要程序集作为字符串名称。 这是可能的还是我总是需要程序集名称?

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

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

希望我理解正确。

对于第一个问题,你可以做类似的事情

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM