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; } }