【问题标题】:How to create variable based on Mef plugin class如何基于 Mef 插件类创建变量
【发布时间】:2014-10-30 19:48:46
【问题描述】:

我是 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 的变量。我的大多数插件都与此示例相同。我需要创建具有相同类型插件的插件实例。

我认为我使用了错误的方法,有人可以给我一些例子吗?

最好的问候,

【问题讨论】:

    标签: c# .net mef


    【解决方案1】:

    MEF 的全部意义在于将插件/服务与主机代码(以及彼此)分离。

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

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

    【讨论】:

    • 感谢您的快速答复。老实说,我是插件系统的新手,如果我可以为我的应用程序添加插件支持,我就不必使用 mef。插件系统是必需的,因为我从数据库中获取授权部分,这样我就可以只更新一个插件或添加新功能而无需更新整个应用程序。如果我为每个插件声明一个接口,这可能仍然让我更新插件,但是那个时候我不能向同一个插件添加方法或者我不能添加新插件。
    • @Xhays:如果你想将插件代码与应用代码解耦,你需要有一个稳定的接口。不管你做什么,你都不能添加一个方法,因为现有的插件不会有它。欢迎来到艰难的版本控制世界。
    • 感谢您的建议。当我在 Visual Studio 中以“((Plugins.DownloadManager)PController.GetPlugin(“DownloadManager”)))尝试快速观看时。 PController.GetPlugin 返回部件的 IPlugin。它让我检查插件中的所有变量和方法。 (插件 dll 未引用到应用程序)。但是即使我尝试设置插件的引用,相同的命令行也无法在我的代码中运行。你知道 vs 使用什么样的机制来检查插件方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多