/// <include file='doc\VSDesignerLoader.uex' path='docs/doc[@for="VSDesignerLoader.CreateCodeLoader"]/*' />
        /// <devdoc>
        ///     Called to create the MCM loader.
        /// </devdoc>
        protected override CodeLoader CreateCodeLoader(TextBuffer buffer, IDesignerLoaderHost host)
        {
            CodeLoader loader = null;

            // Get the context object off of the hierarchy, and ask it for an IVSMDCodeDomProvider
            // instance.
            //
            IVsHierarchy hier = Hierarchy;

            if (hier is IVsProject)
            {
                NativeMethods.IOleServiceProvider oleProvider = (NativeMethods.IOleServiceProvider)((IVsProject)hier).GetItemContext(ItemId);

                if (oleProvider != null)
                {
                    ServiceProvider      contextProv     = new ServiceProvider(oleProvider);
                    IVSMDCodeDomProvider codeDomProvider = (IVSMDCodeDomProvider)contextProv.GetService(typeof(IVSMDCodeDomProvider));
                    if (codeDomProvider != null)
                    {
                        loader = new VsCodeDomLoader(this, hier, ItemId, (CodeDomProvider)codeDomProvider.CodeDomProvider, buffer, host);
                    }
                }
            }

            if (loader == null)
            {
                throw new NotSupportedException(SR.GetString(SR.DESIGNERLOADERNoLanguageSupport));
            }

            return(loader);
        }
 public VsCodeDomLoader(DesignerLoader loader, IVsHierarchy hier, int itemid, CodeDomProvider provider, TextBuffer buffer, IDesignerLoaderHost host) : base(loader, provider, buffer, host)
 {
     this.vsHierarchy = hier;
     this.itemid      = itemid;
 }