有人知道给定类型的FullName(namespace.classname格式)但没有AssemblyQualifiedName的类的实例的简便方法吗?该类型的FullName仅包含在引用的单个程序集中,并且在运行时可用,因此没有歧义。
我没有类型,我有一个字符串-仅全名,没有程序集部分。我不知道程序集,我只知道它被引用了,只有一个包含全名类型的程序集。
谢谢!
编辑: 这与从专有协议中反序列化实例有关。我已经收到了很好的答案,但是为了获得最佳解决方案而不遍历所有程序集,我将要做的是创建一个带有fullName键和程序集合格名称作为值的静态字典,因为我知道确切的是这些课程,并且它们是一组受限的。
答案 0 :(得分:3)
您可以get all of the active assemblies,然后逐一浏览具有您全名的类型。您需要为程序集之间存在多个匹配项或没有匹配项的可能性做准备。
答案 1 :(得分:0)
加载所有程序集并选择其类型,然后根据名称进行过滤。
public static object CreateType(string typeName)
{
var allTypes = AppDomain.CurrentDomain
.GetAssemblies()
.SelectMany
(
a => a.GetTypes()
);
var type = allTypes.Single( t => t.Name == typeName );
return Activator.CreateInstance(type);
}
您可以考虑添加一些验证代码来检查重复项,并确保存在默认构造函数。