internal static IGraphElementPropertyModel FromGraphElementModels(params IGraphElementModel[] models)
 {
     return(Empty
            .ConfigureMemberMetadata(_ => _
                                     .AddRange(models
                                               .SelectMany(model => model.Metadata.Keys)
                                               .SelectMany(x => x.GetTypeHierarchy())
                                               .Distinct()
                                               .SelectMany(type => type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly))
                                               .Select(property => new KeyValuePair <MemberInfo, MemberMetadata>(property, new MemberMetadata(property.Name))))));
 }
 public static IGraphElementPropertyModel ConfigureElement <TElement>(this IGraphElementPropertyModel model, Func <IMemberMetadataConfigurator <TElement>, IImmutableDictionary <MemberInfo, MemberMetadata> > transformation)
     where TElement : class
 {
     return(model.ConfigureMemberMetadata(
                metadata => transformation(new MemberMetadataConfigurator <TElement>(metadata))));
 }