C#从FullName类型创建类的实例

时间:2019-05-14 15:54:09

标签: c# .net createinstance

有人知道给定类型的FullName(namespace.classname格式)但没有AssemblyQualifiedName的类的实例的简便方法吗?该类型的FullName仅包含在引用的单个程序集中,并且在运行时可用,因此没有歧义。

我没有类型,我有一个字符串-仅全名,没有程序集部分。我不知道程序集,我只知道它被引用了,只有一个包含全名类型的程序集。

谢谢!

编辑: 这与从专有协议中反序列化实例有关。我已经收到了很好的答案,但是为了获得最佳解决方案而不遍历所有程序集,我将要做的是创建一个带有fullName键和程序集合格名称作为值的静态字典,因为我知道确切的是这些课程,并且它们是一组受限的。

2 个答案:

答案 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);
}

您可以考虑添加一些验证代码来检查重复项,并确保存在默认构造函数。