我正在尝试在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吗?
不确定要走哪条路。任何方向或想法将不胜感激。
谢谢!
答案 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 !!