Visual Studio扩展:从装饰中获取包
Visual Studio Extension: Get Package from adornment
我正在开发 Visual Studio 扩展,由以下部分组成:
- 一个菜单和一系列命令
- 一个工具window
- 一个或多个文本视图装饰
- AysncPackage 的自定义实现
现在,虽然工具 Window 和命令要么由我的扩展的 AsyncPackage 连接,要么有一个句柄,但我无法弄清楚的是我如何获得自我的句柄-来自我的一个或多个文本装饰的相同 AsyncPackage。
例如,我的工具 Window 扩展了工具 Window 窗格,它通过包的 ProvideToolWindow 属性与包挂钩。我的命令是在 Package 本身内部构造的,因此将句柄传递给 AsyncPackage 非常简单。
我无法解决的问题是您如何在我的任何 TextAdornments 中获取对此 AsyncPackage 的引用。
有什么帮助吗?
这是一个棘手的问题!您必须让 IVsShell 根据与您的包关联的 GUID 检索包,然后将其转换为您的界面(或 IPackage 的基本界面)
private IMyPackageInterface _myPackage;
//let's get our hands on that package
var vsShell = (IVsShell) ServiceProvider.GlobalProvider.GetService(typeof(IVsShell));
if (vsShell == null)
{
throw new NullReferenceException();
}
if (vsShell.IsPackageLoaded(PackageGuid, out var myPossiblePackage)
== Microsoft.VisualStudio.VSConstants.S_OK) {
_myPackage = (IMyPackageInterface)myPossiblePackage;
我正在开发 Visual Studio 扩展,由以下部分组成:
- 一个菜单和一系列命令
- 一个工具window
- 一个或多个文本视图装饰
- AysncPackage 的自定义实现
现在,虽然工具 Window 和命令要么由我的扩展的 AsyncPackage 连接,要么有一个句柄,但我无法弄清楚的是我如何获得自我的句柄-来自我的一个或多个文本装饰的相同 AsyncPackage。
例如,我的工具 Window 扩展了工具 Window 窗格,它通过包的 ProvideToolWindow 属性与包挂钩。我的命令是在 Package 本身内部构造的,因此将句柄传递给 AsyncPackage 非常简单。
我无法解决的问题是您如何在我的任何 TextAdornments 中获取对此 AsyncPackage 的引用。
有什么帮助吗?
这是一个棘手的问题!您必须让 IVsShell 根据与您的包关联的 GUID 检索包,然后将其转换为您的界面(或 IPackage 的基本界面)
private IMyPackageInterface _myPackage;
//let's get our hands on that package
var vsShell = (IVsShell) ServiceProvider.GlobalProvider.GetService(typeof(IVsShell));
if (vsShell == null)
{
throw new NullReferenceException();
}
if (vsShell.IsPackageLoaded(PackageGuid, out var myPossiblePackage)
== Microsoft.VisualStudio.VSConstants.S_OK) {
_myPackage = (IMyPackageInterface)myPossiblePackage;