如何获取窗口上下文,以便可以在 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在 resharper 插件中提供带有 datacontext 类型的智能感知?
如何区分消息是来自 ReSharper 还是 Visual Studio
犰狳的自定义 natvis 文件仅适用于 resharper