如何基于Mef插件类创建变量

时间:2014-10-30 19:48:47

标签: c# .net mef

我是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,有人可以给我一些例子吗?

最诚挚的问候,

1 个答案:

答案 0 :(得分:0)

MEF的重点是将插件/服务与主机代码(以及彼此之间)分离。

如果您需要直接与插件类型进行交互,那么您无法从MEF中获得任何好处。

您可能希望公开基本IDownloadManager接口并将其导出,但您仍需要确定MEF是否完全有用。