2011-07-13 81 views
1

從官方MEF documentationMEF:「A可組合的一部分,應至少包含一個出口」

一個可組合的一部分,應至少包含一個出口
可以將Composable零件添加到容器的明確性或通過使用目錄創建。
MEF附帶的默認目錄通過存在導出屬性來標識可組合部件。

這是否意味着這個片段形成同一文件將無法正常工作,使用默認的目錄時,因爲它不出口什麼?

class Program 
{ 
    [Import] 
    public IMessageSender MessageSender { get; set; } 
} 

我覺得很難相信,參與MEF混合所有類,都必須「把食物送到表」,即使他們只是想「消費」。
上面的Program就是一個簡單的例子:這個類沒有什麼可以添加到MEF mix的

其次,
如何被添加件「明確到容器」
例如, CompositionContainer不能幫助我進一步。

在此先感謝 月

回答

2

一個組合的一部分是可以導入到另一部分的一部分。這裏的示例:

class Program 
{ 
    [Import] 
    public IMessageSender MessageSender { get; set; } 
} 

Program不是一個可組合的部分。它不會自動導入到其他部分。您的出口IMessageSender是可組合的零件。

您可以明確地添加部分使用CompositionBatch的容器,它允許你ExportComposablePart實例添加到您的容器明確,或通過擴展可以添加原始值:

var user = new User() { Name = "Matt" }; 
var batch = new CompositionBatch(); 
batch.AddExportedValue(user); 

CompositionContainer.Compose(batch); 

凡最後調用將您的零件添加到容器中。

0

在你的榜樣,那麼該程序將調用container.SatisfyImports();能夠檢索IMessageSender

此外,您可以在接口上使用繼承的導出,因此實現所述接口的所有內容都會自動導出。

[InheritedExport] 
public interface IMessageSender 
{ 
} 

見我的代碼在這裏:MEFMVVMCS.zip

相關問題