.NET:无法将对象转换为它实现的接口

2024-02-04

我有一个类(TabControlH60),它既继承自基类(UserControl)又实现了一个接口(IFrameworkClient)。我使用 .NET Activator 类实例化该对象。使用返回的实例,我可以转换为 UserControl 基类,但不能转换为接口。我得到的异常位于代码片段下方。如何投射到界面?

object obj = Activator.CreateInstance(objType);
Type[] interfaces = obj.GetType().GetInterfaces(); // contains IFrameworkClient

m_Client = (UserControl)obj;                 // base class cast works
IFrameworkClient fc = (IFrameworkClient)obj; // interface cast fails

// Note: The (IFrameworkClient)obj cast works fine in the debugger Watch window.
{"Unable to cast object of type 'FPG.H60.AFF.TabControlH60' to type 
    'FPG.AFF.Interfaces.IFrameworkClient'."}

我的一个提供“插件”功能的库也有同样的问题......我终于让它工作了......

这是我的问题:我有一个使用插件的主程序集,一个带有插件的程序集(Plugin.dll)和(重要的)另一个提供插件功能的程序集(Library.dll)。

Plugin.dll 引用了主程序集(以便能够扩展它)和带有插件函数的 Library.dll。 - 它的二进制文件位于相对于主程序集的目录“./Plugins”。

主程序集还引用了插件函数。程序集是为了使用“PluginManager”而编写的。这个“PluginManager”获取路径并通过反射加载所有 *.dll 文件,以便分析是否存在“IPlugin”接口(也来自 Library.dll)。

每次我调用 PluginManager 加载插件时,它都无法将它们转换为“IPlugin”,尽管它们实现了它。

我几乎要生气了——但后来我发现了整个问题。通过编译插件,不仅将“Plugin.dll”写入“./Plugins”目录,而且还将“Library.dll”写入“./Plugins”目录。通过每次使用我的 PluginManager 意外加载“Library.dll”,我现在有两种类型的“IPlugin” - 一种在主程序集中使用的实际“Library.dll”中,另一种是通过我的 PluginManager 加载的 - 并且这些是不兼容的!

注意 - 如果您不加载“./Plugins/Library.dll”,您仍然会遇到问题 - 因为如果您加载引用“Library.dll”的“Plugin.dll”,那么它只会使用同一目录中的那个。 ..倾斜...!!我的 PluginManager 现在只是删除它找到的“Library.dll”。

线索是:确保不要在不同的上下文中访问两个程序集!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET:无法将对象转换为它实现的接口 的相关文章

  • 有没有快速创建集合的方法?

    目前我正在创建一个像这样的新集 std set a s s insert a1 s insert a2 s insert a3 s insert a10 有没有办法创建s在一行 int myints 10 20 30 40 50 std s
  • 在 C# 中按元素相乘数组具有意想不到的性能

    我想找到按元素相乘两个数组的最佳方法 这是更广泛项目的一部分 其中性能而不是唯一的考虑因素 我今天开始用 C Linqpad 编写一些函数 因此它还没有以任何方式进行优化 下面代码的输出如下 Environment ProcessorCou
  • 我如何理解这个 C 类型声明?

    double bar int double double double double 在查看讲座幻灯片时 我发现了留给学生的练习 用简单的英语来说 什么是类型bar在这个 C 声明中 Please帮助我解决这个问题 我什至不知道从哪里开始
  • VS 程序在调试模式下崩溃,但在发布模式下不崩溃?

    我正在 VS 2012 中运行以下程序来尝试 Thrust 函数查找 include cuda runtime h include device launch parameters h include
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • ASP.Net Core 内容配置附件/内联

    我正在从 WebAPI 控制器返回一个文件 Content Disposition 标头值自动设置为 附件 例如 处置 附件 文件名 30956 pdf 文件名 UTF 8 30956 pdf 当它设置为附件时 浏览器将要求保存文件而不是打
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • 类的成员复制

    在学习 复制成员 概念时 书中给出了如下说法 此外 如果非静态成员是引用 const 或没有复制赋值的用户定义类型 则无法生成默认赋值 我不太明白这个声明到底想传达什么 或者说这个说法指的是哪一种场景 谢谢 该语句与编译器自动为您编写的类
  • vs2008 c#:Facebook.rest.api如何使用它来获取好友列表?

    如何在此基础上取得进一步的进步 获取好友列表的下一步是什么 string APIKey ConfigurationManager AppSettings API Key string APISecret ConfigurationManag
  • 如何在 QTabWidget Qt 中展开选项卡

    我有一个QTabWidget像这个 但我想展开选项卡以 填充 整个小部件宽度 如下所示 我怎样才能做到这一点 我在用Qt 5 3 2 and Qt 创建者 3 2 1 Update 我尝试使用setExpanding功能 ui gt myT
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作
  • C++ Streambuf 方法可以抛出异常吗?

    我正在尝试找到一种方法来获取读取或写入流的字符数 即使存在错误并且读 写结束时间较短 该方法也是可靠的 我正在做这样的事情 return stream rdbuf gt sputn buffer buffer size 但如果streamb
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • 使我的 COM 程序集调用异步

    我刚刚 赢得 了在当前工作中维护用 C 编码的遗留库的特权 这个dll 公开使用 Uniface 构建的大型遗留系统的方法 除了调用 COM 对象之外别无选择 充当此遗留系统与另一个系统的 API 之间的链接 在某些情况下 使用 WinFo
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • 为什么从 iOS7 迁移后 iOS8 SSL 请求会间歇性失败? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我有一个 iOS 应用程序 在 iOS7 上运行良好 现在我们正在iOS8上进行测试 在iOS8下运行时 我们遇到了SSL问题 某
  • Java 中不带时区偏移量的 SimpleDateFormat (GMT+00:00) 用于自定义时区

    是否可以使用 SimpleDateFormat 类在 Java 中格式化日期时间 以给出日期的时区部分 而无需在其后添加 0000 Edit 我们正在更改 Java 中的默认时区 如下所示 SimpleTimeZone tz new Sim
  • 插入到 hive 中不存在的位置

    我需要 ansi sql 中等效项的 hive 语法 insert into tablea id select id from tableb where id not in select id from tablea 因此 tablea 不
  • Julia 的负/补索引,如 R

    Julia 中是否有类似于 R 负索引的功能 在 R 中 代码类似于 x 1 10 inds c 1 5 7 x inds 1 2 3 4 6 8 9 10 我发现这在许多情况下都非常有用 特别是对于采样索引以创建测试 训练集之类的事情 而
  • Jenkins Pipeline 不与 docker-compose 一起运行,因为它无法连接到 docker 守护进程

    我正在尝试构建 docker 映像并在 Jenkins 管道内使用 docker compose 启动容器 我有一个适用于 Jenkins 的自定义 docker 映像 其中我使用开箱即用的 Jenkins 映像并安装 Docker CE
  • 使用 C 或 C++ 从控制台获取原始输入

    Initialize new terminal i o settings static struct termios old new1 void initTermios int echo tcgetattr 0 old grab old t
  • Javascript jQuery:查找字符串中的数组元素

    我认为我的问题相当简单 但我对 Javascript 不太有经验 我想做的是提取页面的源代码并将其全部粘贴到变量中 var sourcecode document documentElement innerHTML 然后我有一个术语数组 我
  • npm 安装 package.json 中指定的确切包版本

    目前 如果我跑npm install 它会安装已安装软件包的更新版本 如何安装中指定的确切版本package json file 默认情况下 npm 使用 安装软件包 这意味着同一主要范围内的任何版本 您可以使用 save exact 切换
  • 模拟网络服务

    我们有两个组件 企业应用程序 X 和 Web 服务 Y 我们希望制作我们的 自动化 测试工具 仅测试应用程序 X 与 Y 交互 并且我们没有可用的网络服务 Y Notes 测试工具将是一个桌面应用程序 我们不想使用其他外部工具 例如Soap
  • 隐藏同一类的所有特定 div 的角度方式是什么

    我想做一件简单的事情 我有一个应用程序 它有某些需要显示的div 仅特定的一个 并且如果单击它之外的某处则隐藏 例如 所有特定的类 使用 jquery 这很容易 some class style display none psuedo co
  • 计算列表中每个项目之间的相关性

    我正在尝试计算列表中每个项目之间的皮尔逊相关性 我试图获取数据 0 和数据 1 数据 0 和数据 2 以及数据 1 和数据 2 之间的相关性 import scipy from scipy import stats data 1 2 4 9
  • 用 TextViews 解决椭圆问题

    哇SDK 哇 因此 我尝试在 TextView 单行 运行到屏幕外之前在其末尾添加一个椭圆 我读到省略号已损坏 为 2 1 开发 经过Google搜索 每个人似乎都建议将inputType设置为text 将maxLines设置为1 你会得到
  • HTML5 视频标签在 Safari、iPhone 和 iPad 中不起作用

    我正在尝试创建一个 html5 网页 其中有一个像 13s 这样的小视频 我将该视频的 flash 版本转换为 3 种格式 使用 fireFogg 的 ogv 使用 firefogg 的 webm 以及使用 HandBrake 应用程序 h
  • Vue中的页面滑动过渡?

    我正在使用 Vue js 构建一个应用程序 我想为其提供更多类似本机的视图 如何添加页面幻灯片切换 我当前的代码
  • PySide 入门 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我决定学习 Python Gui 开发 由于 PyQt 不是免费的 所以选择了 PySide 但是 与 PyQt 不同 PySide 没有
  • 使用 jQuery mobile 下载文件

    我对 jquery mobile 相当陌生 在尝试链接 jquery mobile 项目中的文件进行下载时遇到错误 我希望用户能够从应用程序下载 zip 文件 但要么出现页面加载错误 要么在新页面中显示未定义 我尝试使用锚标记来链接要下载的
  • f:convertNumber 不会对十进制尾随字母字符引发转换错误

    我在用
  • 无法调用插入的 Javascript 片段

    我正在尝试将 Javascript 片段插入网页 然后使用 blue prism 调用它 这样做的目的是分析搜索返回哪些元素 以确定整个流程中下一步该去哪里 我已经使用 IE 11 开发者控制台在目标网站上测试了 Javascript 代码
  • 在 digitalocean 上安装 PHP 7

    我尝试在 digitalocean 上使用 PHP 7 但文件内的脚本无法运行 这是我用来安装的 sudo apt get install php7 libapache2 mod php7 php7 mcrypt 我可以执行 php ver
  • .NET:无法将对象转换为它实现的接口

    我有一个类 TabControlH60 它既继承自基类 UserControl 又实现了一个接口 IFrameworkClient 我使用 NET Activator 类实例化该对象 使用返回的实例 我可以转换为 UserControl 基