如何让 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!!