/// <include file='doc\DesignerPackage.uex' path='docs/doc[@for="DesignerPackage.OnCreateService"]/*' />
        /// <devdoc>
        ///     Demand creates the requested service.
        /// </devdoc>
        private object OnCreateService(IServiceContainer container, Type serviceType)
        {
            if (serviceType == typeof(IVSMDPropertyBrowser))
            {
                return(new PropertyBrowserService());
            }
            if (serviceType == typeof(IToolboxService))
            {
                if (toolboxService == null)
                {
                    toolboxService = new ToolboxService();
                }
                return(toolboxService);
            }
            if (serviceType == typeof(IVSMDDesignerService))
            {
                return(new DesignerService());
            }
            if (serviceType == typeof(DocumentManager) || serviceType == typeof(IDesignerEventService))
            {
                if (documentManager == null)
                {
                    documentManager = new ShellDocumentManager(this);
                }
                return(documentManager);
            }
            if (serviceType == typeof(ITypeResolutionServiceProvider))
            {
                if (typeLoaderService == null)
                {
                    typeLoaderService = new ShellTypeLoaderService(this);
                }
                return(typeLoaderService);
            }
            if (serviceType == typeof(ILicenseManagerService))
            {
                if (licenseManagerService == null)
                {
                    licenseManagerService = new ShellLicenseManagerService(this);
                }
                return(licenseManagerService);
            }
            if (serviceType == typeof(IAssemblyEnumerationService))
            {
                return(new AssemblyEnumerationService(this));
            }

            if (serviceType == typeof(IHelpService))
            {
                return(new HelpService(this));
            }

            Debug.Fail("Container requested a service we didn't say we could provide");
            return(null);
        }
        /// <include file='doc\DesignerPackage.uex' path='docs/doc[@for="DesignerPackage.Close"]/*' />
        /// <devdoc>
        ///     Overrides Close to clean up our editor factory.
        /// </devdoc>
        public override void Close()
        {
            SystemEvents.DisplaySettingsChanged -= new EventHandler(this.OnSystemSettingChanged);
            SystemEvents.InstalledFontsChanged  -= new EventHandler(this.OnSystemSettingChanged);
            SystemEvents.UserPreferenceChanged  -= new UserPreferenceChangedEventHandler(this.OnUserPreferenceChanged);

            if (editorFactory != null)
            {
                try {
                    editorFactory.Dispose();
                }
                catch (Exception e) {
                    Debug.Fail(e.ToString());
                }
                editorFactory = null;
            }

            if (documentManager != null)
            {
                documentManager.Dispose();
                documentManager = null;
            }

            if (typeLoaderService != null)
            {
                typeLoaderService.Dispose();
                typeLoaderService = null;
            }

            if (licenseManagerService != null)
            {
                licenseManagerService.Dispose();
                licenseManagerService = null;
            }

            if (toolboxService != null)
            {
                toolboxService.Dispose();
                toolboxService = null;
            }

            #if PERFEVENTS
            if (performanceEvent != IntPtr.Zero)
            {
                NativeMethods.CloseHandle(performanceEvent);
                performanceEvent = IntPtr.Zero;
            }
            #endif

            base.Close();
        }