- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我之前在 C# 中为一个工作正常的插件系统做过这件事,这就是为什么我对为什么这个新的、独立的插件系统没有按我预期的方式工作感到困惑。
我有我的插件程序集——我们称之为“plugin.dll”,我有我的主程序集——我们称之为 App.exe。
我有一个名为IMyObject
的接口(interface)及其实现MyObject
,两者都在plugin.dll 中定义。我已将 IMyObject
的确切代码文件(插件开发人员提供给我)复制到我的主 App.exe 程序集中。
当我尝试将使用反射加载的对象转换为该对象实现的接口(interface)时,我得到了一个InvalidCastException
。我知道对象实现了它,因为
t.GetInterface(typeof(IMyObject).FullName) != null
是真的。我还可以在 Visual Studio 的对象资源管理器中浏览 MyObject
,我可以看到它实现了 IMyObject
。
这里是错误的地方:
if (ifaceType != null)
{
ConstructorInfo constructor = ifaceType.GetConstructor(new Type[] { });
if (constructor != null)
{
object obj = constructor.Invoke(null); // this works - obj is assigned an
// instance of MyObject
IMyObject myObj = (IMyObject)obj; // triggers InvalidCastException
}
}
我能看到我现在所做的和我以前实现它的方式之间的唯一区别是接口(interface)是在两个单独的程序集中定义的(即使代码文件是相同的并且它们属于同一个命名空间)。
这就是我遇到麻烦的原因吗?如果是这样,我如何在不在编译时链接的情况下连接到我的插件,并使用插件本身定义的接口(interface)?
我应该补充一点,除了界面之外,我无权访问插件的源代码。
最佳答案
尽管这些接口(interface)具有相同的代码,但它们是两个不同程序集中的两个独立接口(interface)(您可以打印它们的 AssemblyQualifiedNames 并查看差异)。
关于c# - C# 中的接口(interface)和后期绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13487016/
总结 我需要在 Camel 服务器 in-modify-out 过程中构建一组统计数据,并将这些统计数据作为一个对象(单个 json 日志行)发出。这些统计数据需要包括: input file met
某个元素使用以下 CSS 功能产生了惊人的结果: 盒子阴影;边界半径;边框和背景上的 RGBA 颜色。 问题是前两个需要延迟 Firefox/Chrome/Safari 浏览器,第二个不兼容 IE8
在我的 Rails 应用程序中有这段代码: window.onload = -> $("#mycontainer").typewriter() $("#div1").fadeIn("slow"
我想检查我的 api 是否工作正常。我有一个只有 post 请求而没有 GET 的 api。 教程在这里:https://learn.microsoft.com/en-us/azure/applica
我想检查我的 api 是否工作正常。我有一个只有 post 请求而没有 GET 的 api。 教程在这里:https://learn.microsoft.com/en-us/azure/applica
我是一名优秀的程序员,十分优秀!