public void CountDescendants() { DescendantsCount = FlattenedHierarchy.Count() - 1; DirectDescendantsCount = DerivedTypes.Count(); OnPropertyChanged("DescendantsCount"); OnPropertyChanged("DirectDescendantsCount"); }
/// <summary> /// Gets a list of all types derived from the current type /// </summary> /// <param name="t">The root type to check for</param> /// <returns>All of the derived types</returns> public static IEnumerable <Type> GetDerivedTypes(Type t) { if (t is null) { throw new ArgumentNullException(nameof(t)); } if (t.IsInterface) { throw new ArgumentException($"Type to check for can not be interface as this method uses 'IsSubclassOf'. To search for interfaces use {nameof(GetAllImplementations)}"); } if (DerivedTypes.ContainsKey(t)) { StaticLogger.Log($"RE: Using cached derived types for {FriendlyTypeName(t)}", StaticLogger.LoggingLevel.Method); foreach (Type toReturn in DerivedTypes[t]) { yield return(toReturn); } } else { StaticLogger.Log($"RE: Searching for derived types for {FriendlyTypeName(t)}", StaticLogger.LoggingLevel.Call); List <Type> typesToReturn = new List <Type>(); foreach (Type type in GetDependentAssemblies(t).GetAllTypes()) { if (type.IsSubclassOf(t) && type.Module.ScopeName != "EntityProxyModule") { if (StaticLogger.Level != StaticLogger.LoggingLevel.None) { StaticLogger.Log($"RE: --{t.Name} :: {FriendlyTypeName(type)}", StaticLogger.LoggingLevel.Call); } typesToReturn.Add(type); } else { if (StaticLogger.Level != StaticLogger.LoggingLevel.None) { StaticLogger.Log($"RE: --{t.Name} !: {FriendlyTypeName(type)}", StaticLogger.LoggingLevel.Call); } } } DerivedTypes.TryAdd(t, typesToReturn.ToList()); StaticLogger.Log("RE: Finished type search", StaticLogger.LoggingLevel.Method); foreach (Type toReturn in typesToReturn) { yield return(toReturn); } } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) { return(null); } var jo = JObject.Load(reader); var joType = jo["type"]; var type = DerivedTypes.Where(t => t.Name == joType.Value <string>()).SingleOrDefault(); if (type == null) { throw new JsonSerializationException("type property not found or malformed"); } var obj = Activator.CreateInstance(type); using var joReader = jo.CreateReader(); serializer.Populate(joReader, obj); return(obj); }
public PairingComboBox() { DataSource = DerivedTypes.FindAllDerivedTypes <PairingMethod>(); DisplayMember = "Name"; }
static Type[] GetDerivedTypes() { return(DerivedTypes.ToArray()); }
internal void AddDerivedType(Type type) { lock (SyncRoot) { DerivedTypes.Add(type); } }