private ICustomTypeDescriptor BuildDescriptor(Type objectType) { // NOTE: "descriptors" already locked here // get the parent descriptor and add to the dictionary so that // building the new descriptor will use the base rather than recursing ICustomTypeDescriptor descriptor = base.GetTypeDescriptor(objectType, null); descriptors.Add(objectType, descriptor); try { // build a new descriptor from this, and replace the lookup descriptor = new HyperTypeDescriptor(descriptor); descriptors[objectType] = descriptor; return(descriptor); } catch { // rollback and throw // (perhaps because the specific caller lacked permissions; // another caller may be successful) descriptors.Remove(objectType); throw; } }
private ICustomTypeDescriptor BuildDescriptor(Type objectType) { // NOTE: "descriptors" already locked here // get the parent descriptor and add to the dictionary so that // building the new descriptor will use the base rather than recursing ICustomTypeDescriptor descriptor = base.GetTypeDescriptor(objectType, null); descriptors.Add(objectType, descriptor); try { // build a new descriptor from this, and replace the lookup descriptor = new HyperTypeDescriptor(descriptor); descriptors[objectType] = descriptor; return descriptor; } catch { // rollback and throw // (perhaps because the specific caller lacked permissions; // another caller may be successful) descriptors.Remove(objectType); throw; } }