【问题标题】:Type check on runtime loaded assembly对运行时加载的程序集进行类型检查
【发布时间】:2016-05-16 12:37:19
【问题描述】:

我在运行时使用带有单声道的外部 dll 时遇到问题。 假设我们有一个包含 IMyInterface 接口的框架 dll,这是一个使用该框架的“插件”项目,其中一个类实现 IMyInterface 接口。 这个插件一旦部署为 dll,就可以在运行时从框架本身加载,并且所有实现 IMyInterface 的类都必须添加到框架内的集合中。为此,必须对所有类型进行类型测试。不幸的是,当我从加载的 dll 中获取所有类型时,即使导入的类正在实现已知接口,类型测试也会失败。更准确地说,如下陈述

ImportedType.GetType().IsAssignableFrom(typeof(IMyInterface))

返回 false,即使该类型实际上实现了 IMyInterface。我想这是关于导入类型是 System.RuntimeType,而不是 System.Type。但是我该如何处理这个问题呢?接口 IMyInterface 可能在不同解决方案使用的同一程序集中具有不同的签名?

【问题讨论】:

    标签: c# .net dll mono


    【解决方案1】:

    IsAssignableFrom 是最令人困惑的方法之一

    typeof(IMyInterface).IsAssignableFrom(myObject.GetType())
    typeof(IMyInterface).IsAssignableFrom(ImportedType)
    

    https://msdn.microsoft.com/en-us/library/system.type.isassignablefrom(v=vs.110).aspx

    【讨论】:

    • 刚刚试过你写的语句,还是不行。我认为这涉及到导入类型的基类型实际上是 System.RuntimeType 而不是 System.Type,这可能会造成混淆......
    • 我相信“ImportedType”是一个类型变量。 ImportedType.FullName 返回什么值?
    • 它是“System.MonoType”。但是要检查我使用 ImportedType.BaseType 的类型,哪个值是正确的。
    • 我不确定你是否理解。 ImportedType.FullName == "System.MonoType" 或 ImportedType.BaseType.FullName == "System.MonoType"
    • ImportedType.FullName == "System.MonoType"
    猜你喜欢
    • 2012-08-02
    • 1970-01-01
    • 2013-11-02
    • 2019-01-09
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    相关资源
    最近更新 更多