如何让 Punch (Cocktail) 进入 Visual Studio 的内部 Composition Container?
How do I get Punch (Cocktail) to hoot into Visual Studio's internal Composition Container?
我正在尝试在我的 Visual Studio 2017 可扩展性 (VSIX) 应用程序中使用 DevForce 的 Punch。我的 VSIX 的 MEF 导出未被识别。似乎是因为 VS 使用它自己的组合容器。如何将 Visual Studio 的内部组合容器目录集成到 Cocktail 的组合容器中?
例如,如果我得到对 Visual Studio 的默认目录的引用:
var dte2 = (DTE2)Package.GetGlobalService(typeof(SDTE));
var sp = new ServiceProvider(dte2 as Microsoft.VisualStudio.OLE.Interop.IServiceProvider);
var container = sp.GetService(typeof(Microsoft.VisualStudio.ComponentModelHost.SComponentModel)) as Microsoft.VisualStudio.ComponentModelHost.IComponentModel;
var catalog = container.DefaultCatalog;
如何将该目录添加到 Punch?
或者我应该访问 Visual Studio 的 DefaultExportProvider 或 DefaultCompositionService 吗?
不知道该走哪条路。任何方向或想法将不胜感激。
谢谢!
通过实施以下代码,我能够在 Visual Studio 内让 Punch 识别 MEF 导出:
protected override ComposablePartCatalog PrepareCompositionCatalog()
{
AssemblyCatalog asmCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
CompositionHost.Add(asmCatalog);
return base.PrepareCompositionCatalog();
}
再次感谢 Kim 的帮助!
PS 抱歉把你的名字弄错了。我刚刚意识到你是来自 IdeaBlade 的 Kim Johnson!!
我正在尝试在我的 Visual Studio 2017 可扩展性 (VSIX) 应用程序中使用 DevForce 的 Punch。我的 VSIX 的 MEF 导出未被识别。似乎是因为 VS 使用它自己的组合容器。如何将 Visual Studio 的内部组合容器目录集成到 Cocktail 的组合容器中?
例如,如果我得到对 Visual Studio 的默认目录的引用:
var dte2 = (DTE2)Package.GetGlobalService(typeof(SDTE));
var sp = new ServiceProvider(dte2 as Microsoft.VisualStudio.OLE.Interop.IServiceProvider);
var container = sp.GetService(typeof(Microsoft.VisualStudio.ComponentModelHost.SComponentModel)) as Microsoft.VisualStudio.ComponentModelHost.IComponentModel;
var catalog = container.DefaultCatalog;
如何将该目录添加到 Punch?
或者我应该访问 Visual Studio 的 DefaultExportProvider 或 DefaultCompositionService 吗?
不知道该走哪条路。任何方向或想法将不胜感激。
谢谢!
通过实施以下代码,我能够在 Visual Studio 内让 Punch 识别 MEF 导出:
protected override ComposablePartCatalog PrepareCompositionCatalog()
{
AssemblyCatalog asmCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
CompositionHost.Add(asmCatalog);
return base.PrepareCompositionCatalog();
}
再次感谢 Kim 的帮助! PS 抱歉把你的名字弄错了。我刚刚意识到你是来自 IdeaBlade 的 Kim Johnson!!