如何在Visual Studio 2010 AddIn中封装用户设置(选项页面)

时间:2011-07-10 15:17:29

标签: visual-studio visual-studio-addins

我目前正在开发Visual Studio扩展,我对Options Page有疑问。选项页面允许用户保存有关扩展的设置。 Visual Studio为我们处理了很多工作。

我创建了选项页面。

public class VisualStudioParameter : DialogPage
{
    private string _tfsServerUrl = DefaultParameter.TfsServerUrl;

    [Category("TFS Parameters")]
    [DisplayName(@"Server Name")]
    [Description("The URL of your TFS Server")]
    public string TfsServerUrl
    {
        get { return _tfsServerUrl; }
        set { _tfsServerUrl = value; }
    }
}

首先,我在Visual Studio包中创建了一个方法来访问Options Page。 好的,现在,从我的包中,我可以轻松访问设置。

partial class SpecFlowTfsLinkerExtensionPackage : Package : IParameter
{
    ....
    ....

    public string GetTfsServerUrl()
    {
        return ((VisualStudioParameter) GetDialogPage(typeof (VisualStudioParameter))).TfsServerUrl;
    }
}

现在,我希望能够在另一个库(包含在VSIX包中的另一个项目)中轻松获取这些值。我不想在我的库中引用Visual Studio AddIn包。

我也有单元测试,所以我要创建一个接口。在单元测试期间,我将模拟对象。

public interface IParameter
{
    string GetTfsServerUrl();
}

您是否知道我如何开发一个干净的解决方案来从另一个组件中获取这些参数?

您认为更好的解决方案是在我的库中注入AddIn依赖项吗?

如果您已经开发了Visual Studio扩展,那么如何从核心程序集中封装用户设置?

非常感谢。

1 个答案:

答案 0 :(得分:2)

你可以试试这样的东西:

// Access DTE infrastructure
EnvDTE.DTE dte = Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
// Access options page
var props = dte.get_Properties(@"Your Extension", "General");        
var pathProperty = props.Item("TfsServerUrl");
path = pathProperty.Value as string;