public interface IProtocol { /// <summary> /// 下载事件 /// </summary> event DownloadEventHanlder DownloadEvent; /// <summary> /// 下载数据 /// </summary> /// <param name="datas"></param> void DownloadDatas(byte[] datas); } public interface IProtocolMessage { /// <summary> /// 协议版本 /// </summary> string Version { get; set; } }
定义了两个插件接口,然后一个抽象类DeviceNetAdapterBase继承这个接口
public abstract class DeviceNetAdapterBase : IProtocol { //中间代码 }
最后实现类
[Export(typeof(IProtocol))] [ExportMetadata("Version", "1.0.0.1")] public class MGProtocol : DeviceNetAdapterBase { //中间代码实现 }
最后在加载这个插件
//StaticConfig.Config.PlugDir是生成的插件放dll的目录 var directoryNetPlugCatalog = new DirectoryCatalog(StaticConfig.Config.PlugDir, "*.dll"); // var containerProtocol = new CompositionContainer(directoryNetPlugCatalog); //这里导出插件。其实定义的全局的,为了看的清放到这里,也就是这里就卡住了一直不返回值,这个函数就走不下去了 private IEnumerable<Lazy<IProtocol,IProtocolMessage>> protocalHanders = containerProtocol.GetExports<IProtocol, IProtocolMessage>();
也不知道为什么,我有两种接口的插件放到不同目录下,起初以为是两种插件要导入的原因,但是现在把另一个已经注释了,就剩下这个也不行。一直在GetExports这里卡住不返回。
C#什么时候有了这种语法,卡住不动多半是死循环了。
没有循环啊
@风过之后的晴: 你F1 一下GetExports的帮助吧