2009-12-09 60 views
12

我正試圖圍繞MEF進行思考。 有一件事我不明白。MEF:如果我有多個出口但只需要一個導入?

假設我有一個名爲ISomething的接口,它是一個契約,並且在包含我的應用程序的文件夾中有多個程序集,我不知道它們中有多少個ISomething實現,或者哪一個包含一個。

如果我創建了一個我使用MEF的宿主應用程序,並希望得到一個ISomething,但只有一個,MEF如何決定它會給我哪個實現?或者,與普通的IoC容器類似,我如何告訴它它應該使用哪個實現?

在此先感謝您的答案。

回答

12

請參閱this blog post瞭解有關此問題以及您擁有的一些選項的討論。另外,Glenn Block有一篇博客文章,描述如何customize the container behavior with defaults

+1

格倫關於ExportProviders的文章給了我一個好主意。也許我應該使ExportProvider接受某種配置,其中可以指定默認導出。 – Venemo 2009-12-09 21:30:01

+1

這非常合理,它是我們考慮的場景之一。 – 2009-12-10 10:13:29

11

在MEF的情況下,如果你有很多出口,將滿足的導入,你有兩個選擇:

  1. 更改導入周圍使用[ImportMany]。在運行時決定使用哪個Imports作爲您的合同,可能只是選擇第一個或隨機選擇一個。
  2. 使用[ImportMany]連同Metadata以決定使用哪個導入。
+0

這是一個好主意,但是,我寧願做一些類似於Windsor的事情,從配置中指定一個具體的實現,並告訴MEF使用它。 – Venemo 2009-12-09 19:20:27

+0

@Venemo:您應該可以在運行時使用元數據。 – 2010-01-19 13:22:35

相關問題