private static void LoadTree() { var loaded = AppDomain.CurrentDomain.GetAssemblies(); lock (Loaded) { Loaded.UnionWith(loaded); } var msgAssemblies = new List <Assembly>(); var rootName = IMessageType.Assembly.GetName(); for (int i = 0; i < loaded.Length; i++) { AssemblyName[] refs = loaded[i].GetReferencedAssemblies(); for (int j = 0; j < refs.Length; j++) { if (AssemblyName.ReferenceMatchesDefinition(refs[j], rootName)) { msgAssemblies.Add(loaded[i]); break; } } } lock (Processed) { Processed.UnionWith(msgAssemblies); } var types = new HashSet <Type>(); for (int i = 0; i < msgAssemblies.Count; i++) { types.UnionWith(msgAssemblies[i].GetLoadableTypes().Where(t => IMessageType.IsAssignableFrom(t) && !t.IsInterface)); } TypeTree.AddToTypeTree(types); }
private static void RebuildMessageTree() { var addedTypes = GetTypesDerivedFrom(typeof(Message)); // Update lookups for name and fullnames addedTypes.ForEach(t => nameToType[t.Name] = t); addedTypes.ForEach(t => fullNameToType[t.FullName] = t); if (addedTypes.FirstOrDefault() != null) { TypeTree.AddToTypeTree(addedTypes); MessageTypesAdded(null, null); } }
static MessageHierarchy() { // Get the all of the types in the Assembly that are derived from Message and then build a // backing TypeTree. //Load Root var types = new HashSet <Type>(IMessageType.Assembly.GetLoadableTypes().Where(t => IMessageType.IsAssignableFrom(t) && !t.IsInterface)); TypeTree.AddToTypeTree(types); Processed.Add(IMessageType.Assembly); var sw = Stopwatch.StartNew(); LoadTree(); sw.Stop(); InitialLoadTime = sw.Elapsed; TotalLoadTime = sw.Elapsed; }
private static void LoadAssembly(Assembly assembly) { TypeTree.AddToTypeTree(new HashSet <Type>(assembly.GetLoadableTypes().Where(t => IMessageType.IsAssignableFrom(t) && !t.IsInterface))); }