/// <summary> /// Initializes a new instance of the <see cref="T:CustomTypeProvider"/> class. /// </summary> /// <param name="provider">The provider.</param> public CustomTypeProvider(IServiceProvider provider, List <Project> additionalProjects, bool useProjectItemWrapper) { this.useProjectItemWrapper = useProjectItemWrapper; DynamicTypeService typeService = (DynamicTypeService)provider.GetService(typeof(DynamicTypeService)); Debug.Assert(typeService != null, "No dynamic type service registered."); availableTypes = new Dictionary <string, Type>(); if (additionalProjects != null && additionalProjects.Count > 0) { foreach (Project project in additionalProjects) { IVsHierarchy additionalHierarchy = DteHelper.GetVsHierarchy(provider, project); ITypeDiscoveryService additionalDiscovery = typeService.GetTypeDiscoveryService(additionalHierarchy); AddTypes(additionalDiscovery, project); } } else { IVsHierarchy hier = DteHelper.GetCurrentSelection(provider); Debug.Assert(hier != null, "No active hierarchy is selected."); ITypeDiscoveryService discovery = typeService.GetTypeDiscoveryService(hier); Project dteProject = VSHelper.ToDteProject(hier); AddTypes(discovery, dteProject); } if (availableTypes.Count > 0 && TypesChanged != null) { TypesChanged(this, new EventArgs()); } }