2011-07-29 65 views
2

基本上,我有以下幾點:MEF - 進口必須以某種方式設置,否則它們可能爲空?

[Import] 
private IEventAggregator EventAggregator { get; set; } 

public void DoSomething() 
{ 
    //Should I bother to check for null here before using EventAggregator? 
} 

幾件事情在這裏第一次:

  1. 有沒有可能對我的應用程序沒有一個MEF運行時異常,並留下該屬性爲空?
  2. 既然該屬性是私人的,我應該麻煩檢查每個方法中的null?我在想,如果有一天我決定不使用MEF並做其他事情會怎麼樣。我仍然會確保它在實例化時不能爲空,所以我需要防範它嗎?
  3. 如果它被保護起來怎麼辦?如果這給了我足夠的理由來防止null,因爲現在擴展類可以將它設置爲null。或者,這是我不應該擔心的事情(其他程序員擴展我的課程並用它做出愚蠢的事情)。

問題2而且對於問題:我們應該覈對空,即使我們正在檢查對類中保持財產(即我們應該警惕我們班沒有允許的狀態場景)。

回答

5

MEF的默認行爲是當由於缺少零件而無法創建定義時引發異常。您可以通過將您的[Import]屬性更改爲[Import(AllowDefault = true)]來解決此問題,這會在缺少導出時允許空值。這顯然會影響您的代碼,因爲您需要在DoSomething方法中明確檢查null

關於訪問可視性,將您的導入屬性定義爲private意味着它不能在外部進行更改,因此您可以保證此屬性將被正確設置嗎?如果不是,您需要檢查null

相關問題