private static void InitializeMaps() { Dictionary <string, VirtualDiskFactory> typeMap = new Dictionary <string, VirtualDiskFactory>(); foreach (Type type in ReflectionHelper.GetAssembly(typeof(VirtualDisk)).GetTypes()) { VirtualDiskFactoryAttribute attr = (VirtualDiskFactoryAttribute)ReflectionHelper.GetCustomAttribute(type, typeof(VirtualDiskFactoryAttribute), false); if (attr != null) { VirtualDiskFactory factory = (VirtualDiskFactory)Activator.CreateInstance(type); typeMap.Add(attr.Type, factory); } } _typeMap = typeMap; }
private static void InitializeMaps() { Dictionary <string, VirtualDiskFactory> typeMap = new Dictionary <string, VirtualDiskFactory>(); Dictionary <string, VirtualDiskFactory> extensionMap = new Dictionary <string, VirtualDiskFactory>(); foreach (var type in typeof(VirtualDisk).Assembly.GetTypes()) { VirtualDiskFactoryAttribute attr = (VirtualDiskFactoryAttribute)Attribute.GetCustomAttribute(type, typeof(VirtualDiskFactoryAttribute), false); if (attr != null) { VirtualDiskFactory factory = (VirtualDiskFactory)Activator.CreateInstance(type); typeMap.Add(attr.Type, factory); foreach (var extension in attr.FileExtensions) { extensionMap.Add(extension.ToUpperInvariant(), factory); } } } s_typeMap = typeMap; s_extensionMap = extensionMap; }
/// <summary> /// Locates VirtualDiskFactory factories attributed with VirtualDiskFactoryAttribute, and types marked with VirtualDiskTransportAttribute, that are able to work with Virtual Disk types. /// </summary> /// <param name="assembly">An assembly to scan</param> public static void RegisterVirtualDiskTypes(Assembly assembly) { foreach (Type type in assembly.GetTypes()) { VirtualDiskFactoryAttribute diskFactoryAttribute = (VirtualDiskFactoryAttribute)ReflectionHelper.GetCustomAttribute(type, typeof(VirtualDiskFactoryAttribute), false); if (diskFactoryAttribute != null) { VirtualDiskFactory factory = (VirtualDiskFactory)Activator.CreateInstance(type); TypeMap.Add(diskFactoryAttribute.Type, factory); foreach (string extension in diskFactoryAttribute.FileExtensions) { ExtensionMap.Add(extension.ToUpperInvariant(), factory); } } VirtualDiskTransportAttribute diskTransportAttribute = ReflectionHelper.GetCustomAttribute(type, typeof(VirtualDiskTransportAttribute), false) as VirtualDiskTransportAttribute; if (diskTransportAttribute != null) { DiskTransports.Add(diskTransportAttribute.Scheme.ToUpperInvariant(), type); } } }