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;
        }
Beispiel #2
0
        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);
                }
            }
        }