2011-09-09 39 views
0

我目前正在使用新的VSX MEF擴展框架編寫編輯器邊距。我沒有找到VSPackage-OptionPage的對象,因此我使用舊的框架進行設置。VS2010擴展,OptionPage,讀出值

現在我面臨從MEF組件內讀取設置值的問題。我無法從那裏調用GetDialogPage()。有這樣的代碼是一個好主意:

public static MyPackage Instance; 
public MyPackage() { Instance = this; } // Hopefully called only once? 

public bool MyBoolOption { get { var opts = GetDialogPage(...) as ...; return opts.MyBoolOption; } } 

我不確定這是否是「乾淨的」代碼。

更有問題的是通知我的MEF組件有些變化。例如。 OnApply()通知MEF組件的操作「嘿,該更新了,因爲XYZ已經改變了!」。

如何以乾淨的方式做到這一點?

此致敬禮, D.R.

回答

0

你可以把[Export]屬性上你的包類(MyPackage的),然後用它導入到你的MEF組件[導入]:

[Export] 
public class MyPackage : Package 
{ 
} 

[Export] 
public class EditorExtension 
{ 
    [Import] 
    private MyPackage package = null; 
} 

您也可以,或對你的包活動時的屬性改變OnApply叫做。

+0

您確定MEF未創建MyPackage的新對象,而不是使用Visual Studio創建的現有對象嗎? –

+1

其實你可能是對的。在這種情況下,在包中,您可以獲取MEF組合容器並手動調用ComponentModel.GetService <>()以獲得共享的MEF組合類型。它將從編輯器擴展中導入,同一個實例將被該包共享。 –

+0

謝謝。你知道我怎樣才能將你的評論標記爲有效答案嗎? –