如何创建基于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的全部目的是将插件/服务与主机代码(以及彼此)解耦。

如果你需要直接与插件类型交互,你不会从MEF中获得任何好处。

您可能想要公开一个基本的IDownloadManager接口并导出它,但您仍然需要决定MEF是否有用。