如何获取窗口上下文,以便可以在 resharper 插件中创建 NavigationOptions

Posted

技术标签:

【中文标题】如何获取窗口上下文,以便可以在 resharper 插件中创建 NavigationOptions【英文标题】:How do I get a window context so I can create NavigationOptions in a resharper plugin 【发布时间】:2015-07-01 17:38:07 【问题描述】:

我有一个navigation plugin,我想扩展它以支持上下文导航。除了 NavigationOptions 实例之外,我拥有所需的一切。在我的INavigateFromHereProvider 中,我使用IDataContext 调用,因此可以使用NavigationOptions.FromDataContext 方法从中创建NavigationOptions。伟大的。

在我的上下文操作中,我不会被IDataContext 调用,而是在构建过程中得到ICSharpContextActionDataProvider。我可以从中获取我的IDeclaredElement 以作为我导航决策的基础,但我不确定如何创建我的NavigationOptions 实例。感觉我应该使用NavigationOptions.FromWindowContext,但我似乎需要PopupWindowContextSource,我不知道从哪里获得其中之一。

那么我在哪里可以获得相关的PopupWindowContextSource 来创建我的NavigationOptions

【问题讨论】:

【参考方案1】:

啊,找到了答案(嗯,一个答案)。

我可以用这个:

 var popupWindowContextSource = solution.GetComponent<MainWindowPopupWindowContext>().Source;

我不确定这是否最适合使用,但它似乎有效。

【讨论】:

【参考方案2】:

使用NavigationOptions.FromDataContext 可能会更好。这将从您已经拥有的IDataContext 中提取一个窗口上下文。这应该为您提供一个弹出窗口上下文,该上下文适合您被调用的位置 - 锚定到编辑器窗口或树视图或其他任何内容。使用 MainWindowPopupContext 将为您提供一个基于 Visual Studio 主窗口的上下文,它可能会正常工作,但可能不是最相关的。

【讨论】:

我现在没有IDataContext。我正在添加对通过 Alt-Enter(上下文操作)进行导航的支持,因此在我的 IsAvailable(IUserDataHolder cache) 方法中,我只能访问构造函数中给出的 ICSharpContextActionDataProvider 就是在这个方法中我想得到一个popupwindowcontextsource 糟糕。误读了问题。我认为使用MainWindowPopupContext 很好,那么,或者您甚至可以创建自己的派生自PopupWindowContext

以上是关于如何获取窗口上下文,以便可以在 resharper 插件中创建 NavigationOptions的主要内容,如果未能解决你的问题,请参考以下文章