如何让Punch(鸡尾酒)进入Visual Studio的内部组合容器?

时间:2018-03-22 19:09:35

标签: visual-studio-2017 mef visual-studio-extensions vsix devforce

我正在尝试在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吗?

不确定要走哪条路。任何方向或想法将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

我能够通过实现以下代码在Visual Studio中获取Punch来识别MEF导出:

protected override ComposablePartCatalog PrepareCompositionCatalog() 
{ 
        AssemblyCatalog asmCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); 
        CompositionHost.Add(asmCatalog); 
        return base.PrepareCompositionCatalog(); 
}

再次感谢Kim的帮助! PS抱歉让你的名字错了。我刚才意识到你是来自IdeaBlade的THE Kim Johnson !!