Search code examples
visual-studio-2017mefvisual-studio-extensionsvsixdevforce

How do I get Punch (Cocktail) to hoot into Visual Studio's internal Composition Container?


I am trying to use DevForce's Punch in my Visual Studio 2017 Extensibility (VSIX) application. The MEF Exports of my VSIX are NOT being recognized. It seems becuase VS uses it's own composition container. How can I intergrate Visual Studio's internal composition container catalog to Cocktail's composition container?

For example, if I get a reference to Visual Studio's Default Catalog :

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;

How do I add that catalog to Punch?

Or should I get access to Visual Studio's DefaultExportProvider or DefaultCompositionService?

Not sure which way to go. Any direction or ideas would be greatly appreciated.

Thanks !


Solution

  • I was able to get Punch within Visual Studio to recognize MEF Exports by implementing the following code:

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

    Thanks again Kim for your help! PS Sorry for getting your name wrong. I just realized that you are THE Kim Johnson from IdeaBlade!!