Расширение Visual Studio: получить пакет из украшения - PullRequest
0 голосов
/ 17 сентября 2018

Я разрабатываю расширение Visual Studio, состоящее из:

  1. Меню и серия команд
  2. Окно инструментов
  3. Одно или несколько украшений textview
  4. Пользовательская реализация AysncPackage

Теперь, пока окно инструментов и команды либо подключены, либо имеют дескриптор AsyncPackage для моего расширения, я не могу понять, как получить дескриптор к самому же AsyncPackage от одного или больше моих текстовых украшений.

Например, мое Окно инструментов расширяет ToolWindowPane, который имеет хук к Пакету через атрибут ProvideToolWindow пакета. Мои команды создаются внутри самого пакета, поэтому передача дескриптора в AsyncPackage достаточно проста.

Я не могу понять, КАК вы получаете ссылку на этот AsyncPackage в любом из моих текстовых украшений.

Любая помощь?

1 Ответ

0 голосов
/ 07 ноября 2018

Это было сложно!Вы должны получить 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;
...