private void UpdateItem(ObjectOrValueNode node, MetadataInfo info) { var newInstance = info.GetValue(node.Instance); if (newInstance == null) { node.Metadata[info] = null; } else { var newItem = RegisterItem(newInstance, node); node.Metadata[info] = newItem; } }
public void NoteMetadataRequirement(MetadataInfo info) { MetadataRequirements.Add(info); }
private void ApplyMetadataRequirement(MetadataInfo info) { HashSet<MetadataInfo> members; if (!_typeMetadataRequirements.TryGetValue(info.Type, out members)) { members = new HashSet<MetadataInfo>(); _typeMetadataRequirements[info.Type] = members; } if (!members.Contains(info)) { members.Add(info); // while we are here, update any existing instances with this property foreach ( var i in _items.Values.OfType<ObjectOrValueNode>().Where( x => !x.Metadata.ContainsKey(info) && info.Type.IsAssignableFrom(x.Instance.GetType())).ToList()) UpdateItem(i, info); } }