public static void Refresh() { lock (s_syncRoot) { PreLoadPlugins(); var listDescriptors = new List <BusDeviceDescriptor>(); foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) { try { var refName = typeof(BusDeviceBase).Assembly.GetName().FullName; var hasRef = asm.GetName().FullName == refName || asm.GetReferencedAssemblies() .Any(name => name.FullName == refName); if (!hasRef) { // skip assemblies without reference on assembly which contains BusDeviceBase continue; } foreach (var type in asm.GetTypes()) { if (type.IsClass && !type.IsAbstract && typeof(BusDeviceBase).IsAssignableFrom(type)) { try { BusDeviceBase device = (BusDeviceBase)Activator.CreateInstance(type); var bdd = new BusDeviceDescriptor( type, device.Category, device.Name, device.Description); listDescriptors.Add(bdd); } catch (Exception ex) { Logger.Error(ex, type.FullName); } } } } catch (Exception ex) { Logger.Error(ex, asm.FullName); } } s_descriptors = listDescriptors; } }
private static int DeviceNameComparison( BusDeviceDescriptor left, BusDeviceDescriptor right) { if (left == null && right == null) { return(0); } if (left != null && right != null) { return(left.Name.CompareTo(right.Name)); } return(left == null ? -1 : 1); }