0

我创建了一个对象,该对象使用 DTE 访问 Visual Studio 解决方案中的文件并解析它们以提取信息以驱动我正在实现的新功能。此对象还使用 DTE 事件来检测解决方案的内容何时更改。因此,该对象的范围在 VSPackage 中。但是,我需要对象在实现功能的 IOleCommandTarget 中收集的信息。我曾尝试寻找一种将这个对象从 VSPackage 传递到 IOleCommandTarget 的方法,但到目前为止我还是一无所获。我已经尝试在 IOleCommandTarget 中确定对象的范围,但这不起作用,因为我认为 DTE 事件不会因范围或垃圾收集而触发。

这是我的 IOleCommandTarget 提供程序:

internal class VerilogCommandAndControlHandlerProvider : IVsTextViewCreationListener
{
    [Import]
    internal IVsEditorAdaptersFactoryService AdapterService = null;
    [Import]
    internal ICompletionBroker CompletionBroker { get; set; }
    [Import]
    internal SVsServiceProvider ServiceProvider { get; set; }

    public void VsTextViewCreated(IVsTextView textViewAdapter)
    {
        ITextView textView = AdapterService.GetWpfTextView(textViewAdapter);
        if (textView == null)
            return;

        DTE dte = ((DTE)ServiceProvider.GetService(typeof(DTE)));

        Func<VerilogCommandAndControlHandler> createCommandHandler = delegate () { return new VerilogCommandAndControlHandler(textViewAdapter, textView, dte, this); };
        textView.Properties.GetOrCreateSingletonProperty(createCommandHandler);
    }

}
4

0 回答 0