0
加载插件,我想创建一个插件架构,所以我创建了以下接口无法加载assemly错误时尝试在C#
public interface IPlug
{
string Id { get; }
string Name { get; }
byte IsOn { get; }
bool Execute();
}
现在我参考上面的界面到另一个类库项目。
namespace PlugANameSpace
{
public class PlugA : IPlug
{
private byte _isOn;
public string Id
{
get {return "6666"; }
}
public byte IsOn
{
get { return _isOn; }
}
public string Name
{
get { return "PlugA"; }
}
public PlugA()
{
LoadFromRegistry();
}
public bool Execute()
{
// do some thing that returns true for success or false for error
}
private void LoadFromRegistry()
{
//register in registry
}
}
}
上面类库被复制到主组件文件和存储在文件夹“插件”英寸然后我试着用下面的代码加载插件。
IPlug plug= Activator.CreateInstanceFrom(file, typeof(IPlug).FullName) as IPlug;
file是从Directory.GetFiles
得到的dll文件的方法。 当我尝试创建实例时,它会从程序集“PlugA,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'中抛出错误”无法加载类型'IPlug'。“
我做错了什么。 ?
“异常已通过调用的目标引发异常”,也不会是动态如果我实现了PlugB,PlugC和来自I插件接口的不同命名空间 –
您需要的逻辑遍历配置位置中的所有dll文件,通过Assembly.Load加载它们,然后在那些加载的Assembly对象中找到从IPlug继承的类型 –
@AjitHegde它表示你的插件类的构造函数抛出一个ex ception。如果您想要动态加载插件,您需要使用Michal Hainc建议的反射来检查程序集。 – airafr