如何创建基于Mef插件类的变量
本文关键字:插件 Mef 变量 何创建 创建 | 更新日期: 2023-09-27 18:28:41
我是MEF的新手,我正在尝试使用MEF框架为我的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的变量。我的大多数插件都和这个示例相同。我需要创建具有相同类型插件的插件实例。
我想我用错了方法,有人能给我举几个例子吗?
此致,
MEF的全部目的是将插件/服务与主机代码(以及彼此)解耦。
如果你需要直接与插件类型交互,你不会从MEF中获得任何好处。
您可能想要公开一个基本的IDownloadManager
接口并导出它,但您仍然需要决定MEF是否有用。