Esempio n. 1
0
        public void Add <S>(SystemUri.SchemeSegment scheme)
            where S : CatalogSubject <S>, new()
        {
            LeadingSubjects[typeof(S)] = new S();
            var descendents = Descendents <S>(scheme).ToDictionary(d => d.GetType());

            SubjectsByType.AddRange(descendents);
            foreach (var d in descendents)
            {
                SubjectsByUrn.Add(d.Value.Urn, d.Value);
            }
        }
Esempio n. 2
0
        static IEnumerable <CatalogSubject> Descendents(CatalogSubject parent, SystemUri.SchemeSegment scheme)
        {
            foreach (var childType in parent.GetType().GetNestedTypes())
            {
                var child = (CatalogSubject)Activator.CreateInstance(childType, parent);
                yield return(child);

                foreach (var grandchild in Descendents(child, scheme))
                {
                    yield return(grandchild);
                }
            }
        }
Esempio n. 3
0
 public void RegisterSubject <S>(SystemUri.SchemeSegment scheme)
     where S : CatalogSubject <S>, new()
 => CatalogState.Add <S>(scheme);
Esempio n. 4
0
 static IEnumerable <CatalogSubject> Descendents <S>(SystemUri.SchemeSegment scheme)
     where S : CatalogSubject, new() => Descendents(new S(), scheme);