gpt4 book ai didi

c# - 尝试在接口(interface)的实现中进行转换

转载 作者:行者123 更新时间:2023-11-30 19:44:32 26 4
gpt4 key购买 nike

我正在尝试用 C# 实现一个插件系统,为此我创建了以下类和接口(interface):

包含在加载器和插件中:

interface IDevicePlugin {
string GetName();
string GetVersion();
}

插件代码(编译为.dll)

public class DummyPlugin : IDevicePlugin {
protected string name;
protected string version;

public string GetName() {
return name;
}
public string GetVersion() {
return version;
}
}

加载插件的代码如下:

IDevicePlugin thePlugin;
Assembly plugin = Assembly.LoadFrom("plugin.dll");

foreach (Type pluginType in plugin.GetTypes()) {
if (pluginType.IsPublic && !pluginType.IsAbstract) {
Type typeInterface = pluginType.GetInterface("IDevicePlugin", true);
if (typeInterface != null) {
// the plugin implements our IDevicePlugin interface
thePlugin = (IDevicePlugin)Activator.
CreateInstance(plugin.GetType(pluginType.ToString()));
}
}
}

这会崩溃:

Unable to cast object of type 'PluginTest.DummyPlugin' to type 'PluginTest.IDevicePlugin'.

最佳答案

接口(interface)存在两次:
一次在你的 plugin.dll 中,一次在你的加载器中。
原因是您添加了对包含接口(interface)定义的 *.cs 文件的引用 (=link) 到插件项目。此外,相同的 *.cs 文件是加载程序项目的一部分。
因此,接口(interface)被编译到两个程序集中。这是两个不同的接口(interface),即使它们的名称相同!

要解决此问题,您应该执行以下操作:

将加载器项目的引用添加到插件项目
- 或者 -
为界面创建一个新项目,并从加载程序和插件项目中引用该项目。

关于c# - 尝试在接口(interface)的实现中进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12215571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com