public static void Add(Type type) { lock (descriptors) { if (!providers.ContainsKey(type)) { // determine if the base type was already added // if so, remove it before adding sub-type // (if a sub-type is added after its base type, infinite recursion occurs in GetTypeDescriptor()) var baseFound = false; if (type.BaseType != null && providers.ContainsKey(type.BaseType)) { baseFound = true; Remove(type.BaseType); } // add the provider for the type var provider = new HyperTypeDescriptionProvider(TypeDescriptor.GetProvider(type)); TypeDescriptor.AddProvider(provider, type); providers.Add(type, provider); // initialize descriptor provider.GetTypeDescriptor(type); // if base type was removed, we can now add it back after building the sub-type descriptor if (baseFound) { Add(type.BaseType); } } } }
public static void Add(Type type) { lock (_addedProviders) { if (!_addedProviders.ContainsKey(type)) { TypeDescriptionProvider parent = TypeDescriptor.GetProvider(type); HyperTypeDescriptionProvider provider = new HyperTypeDescriptionProvider(parent); TypeDescriptor.AddProvider(provider, type); _addedProviders[type] = provider; } } }