我创建了一个对象,它使用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);
}
}