簡體   English   中英

如何使用MEF導入多個插件/零件?

[英]How does one import multiple plugin/parts using MEF?

我是MEF的新手,正在嘗試使用它來構建插件系統,但僅限於第一步。

我正在關注Andrew Whitechapel文章 我已經下載了他的示例代碼,它可以正常運行(如果您刪除了一個“導出”程序集-它們在他的示例中是互斥的,並引用了MEF程序集)。

該示例說明了導入單個零件。 我想導入多個零件(全部基於相同的界面)。 因此,我將示例代碼更改如下:

[Import]
// OLD - public Interface.ICalculate Calculate { get; set; }
public IEnumerable<Interface.ICalculate> Calculators { get; set; }

// OLD - Console.WriteLine(
// OLD -     String.Format("{0}", Calculate.Circumference(4)));
foreach (Interface.ICalculate calculator in Calculators)
{
    Console.WriteLine(
    String.Format("{0}", calculator.Circumference(4)));
}

我還為IEnumerable導入了System.Collections.Generic。

關鍵的變化是第一個。 據我了解,這將允許我從多個裝配體中導入零件。 但是,出現以下錯誤:

No valid exports were found that match the constraint

在這一點上,我什至還沒有添加多個“插件”程序集。 仍然只有一個。

為了完整起見,這是他在“插件”類庫中的導出定義(我沒有碰過):

[Export(typeof(Interface.ICalculate))]
public class Calculate : Interface.ICalculate

有任何想法嗎? 我在這里撓頭。 我已經搜索過SO和MEF論壇,但可以找到啟發我的東西。

我正在使用VS 2008 SP1(未安裝2010 Beta)和最新的System.ComponentModel.Composition程序集(2009.26.8.0)。

MEF預覽版本5對此進行了更改。 現在,您需要使用ImportManyAttribute而不是ImportAttribute:

[ImportMany]
public IEnumerable<Intertface.ICalculate> Calculators { get; set; }

有關詳細信息,請參閱PR5公告

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM