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