[英]Existing class/method for parsing fully qualified Type name
鉴于我有一个类型“Wibble.Wobble”存在于程序集“Foo.Bar”中
并且该程序集未加载到主应用程序加载上下文中
是否存在用于将以下字符串解析为其后续部分的现有公共机制:
"Wibble.Wobble, Foo.Bar, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xyz"
问的原因是我需要在运行时加载各种类型,其中一些类型可能在当前的加载上下文中。 其他可能需要从外部组件加载。
我知道如何从当前的加载上下文Type.GetType("typename")
加载类型,我知道如何加载程序集并从中获取类型Assembly.LoadFile("xyz").GetType("abc")
。 我遇到的问题是,如果您尝试从程序Type.GetType
加载类型,则在使用Type.GetType
时, 它不应该是完全限定名称 。
解决方案本身不应该那么复杂,它只是在第一个逗号之前拆分字符串。 但是我想知道是否有一种方法可以将完全限定名称作为对象表示,因此我不必这样做,这将有助于找到正确的程序集而无需遍历整个目录。
经过我的挖掘,我不相信框架中有任何公开可用的东西可以做到这一点。 我希望有人能够向我展示不同的内容,因为我更喜欢使用核心功能,这些功能应该(或者应该)由比我更了解框架的人更好地测试和编写。
因此我已经推出了自己的强类型TypeName
对象。
class TypeName
{
public TypeName(string name)
{
var index = name.LastIndexOf(',');
if (index > 0)
{
Name = name.Substring(0, index).Trim();
AssemblyName = new AssemblyName(name.Substring(index + 1).Trim());
}
else
{
Name = name;
}
}
public string Name { get; private set; }
public AssemblyName AssemblyName { get; private set; }
}
该对象接受一个string
,该string
应该是类型名称或完全限定类型名称。 如果它是完全限定的类型名称,则使用AssemblyName类设置AssemblyName属性,否则将其保留为null。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.