我是MEF的新手,我正在尝试使用MEF framewok为我的C#应用程序添加插件可扩展性。
我从数据库下载插件并通过byte []数据加载。
this.PluginCatalog.Catalogs.Add(new AssemblyCatalog(Assembly.Load(RawData)));
在尝试使用基类插件之前,一切都像魔术一样。
我的一个插件看起来像:
using System;
using System.Net;
using System.ComponentModel;
using System.ComponentModel.Composition;
using System.Reflection;
using PluginCommon;
namespace Plugins
{
[Export("Plugin", typeof(IPlugin))]
[PluginMetadata("DownloadManager", "1.0")]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class DownloadManager : INGPlugin
{
WebClient Client = new WebClient();
public string _text = "qwert";
public AsyncCompletedEventHandler dc { get; set; }
public DownloadProgressChangedEventHandler pc { get; set; }
public void Download(string url, string path)
{
Client.DownloadProgressChanged += this.pc;
Client.DownloadFileCompleted += this.dc;
Client.DownloadFileAsync(new Uri(url), path);
}
}
}
要使用此插件,我需要创建一个类型为DownloadManager的变量。我的大部分插件与此示例相同。我需要使用相同类型的插件创建插件实例。
我认为我使用的是错误的approch,有人可以给我一些例子吗?
最诚挚的问候,
答案 0 :(得分:0)
MEF的重点是将插件/服务与主机代码(以及彼此之间)分离。
如果您需要直接与插件类型进行交互,那么您无法从MEF中获得任何好处。
您可能希望公开基本IDownloadManager
接口并将其导出,但您仍需要确定MEF是否完全有用。