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

谢谢。你知道我怎样才能将你的评论标记为有效答案吗? –