2011-09-09 7 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

あなたはあなたのパッケージのクラス(mypackageと)に[Export]属性を入れて、[インポート]を使用して、MEFコンポーネントでそれをインポートすることができます。

[Export] 
public class MyPackage : Package 
{ 
} 

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

性質がOnApply変更したりするときに、あなたのパッケージのイベントをも持つことができますが呼び出されます。

+0

MEFがVisual Studioによって作成された既存のオブジェクトを使用する代わりに、MyPackageの新しいオブジェクトを作成していないことを確認してください。 –

+1

実際はあなたが正しいかもしれません。この場合、パッケージ内でMEFコンポジションコンテナにアクセスし、ComponentModel.GetService <>()を手作業で呼び出して、共有MEF作成タイプにします。 Editor Extensionからインポートされ、同じインスタンスがパッケージで共有されます。 –

+0

ありがとうございます。私はあなたのコメントを有効な回答としてマークすることができますか? –

関連する問題