2010-06-07 88 views
3

我已閱讀所有關於組合導入而不導出包含類的問題的所有問題,但找不到解決方案。有沒有人知道一種方法來實現我想要做的事情?MEF導入組合問題

我的模塊組件有內部使用的表單和類。這些形式需要不加載訪問一些出口合同,但進口的,因爲它們不是在MEF「合成樹」

主機組裝:

public class Host 
{ 
    public Host() 
    { /* Compose parts here... */ } 

    [Export(typeof(Licence))] 
    public Licence LoadedLicence { get; set; } 

    [Export(typeof(IModule))] 
    public List<IModule> LoadedModules { get; set; } 
} 

模塊組件:

[Export(typeof(IModule))] 
public class Module : IModule 
{   
    public Module() { } 

    public void DoSomething() 
    { 
     SubForm sub = new SubForm(); 
     sub.ShowDialog(); 
    } 

    [Import(typeof(Licence))] 
    public Licence LoadedLicence { get; set; } // This works here 
} 

public class SubForm : Form 
{   
    public SubForm() 
    { } 

    [Import(typeof(Licence))] 
    public Licence LoadedLicence { get; set; } // This doesn't work in here 
} 

據我所見,我的選擇是:

  1. 將參數傳遞給構造函數(痛苦)
  2. 在需要導入的類上使用虛擬導出滿足?

其他?

回答

3

我的具體情況我會簡單地將SubForm導出爲其具體類型並將其導入模塊中。在這種情況下,所有進口都將得到滿足。雖然如果你打算多次打電話給DoSomething,那麼你會遇到問題。

人們有時會這樣做的另一種方式是在您的主機的ICompositionService合同下手動添加CompositionContainer,然後讓您的模塊導入ICompositionService,然後每次創建SubForm時,只需將對象實例傳遞給ICompositionService.SatisifyImportsOnce即可得到它的進口滿意。