public static CloudStorageBase Get() { if (Handler == null) { lock (LockObj) { if (Handler == null) { Assembly[] LoadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (var Dll in LoadedAssemblies) { Type[] AllTypes = Dll.GetTypes(); foreach (var PotentialConfigType in AllTypes) { if (PotentialConfigType != typeof(CloudStorageBase) && typeof(CloudStorageBase).IsAssignableFrom(PotentialConfigType)) { Handler = Activator.CreateInstance(PotentialConfigType) as CloudStorageBase; break; } } } } } if (Handler == null) { throw new AutomationException("Attempt to use CloudStorageBase.Get() and it doesn't appear that there are any modules that implement this class."); } } return(Handler); }
private static CloudStorageBase GetByNameImpl(string InstanceName) { CloudStorageBase Result = null; if (!Handlers.TryGetValue(InstanceName, out Result)) { lock (LockObj) { if (Handlers.ContainsKey(InstanceName)) { Result = Handlers[InstanceName]; } else { Assembly[] LoadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (var Dll in LoadedAssemblies) { Type[] AllTypes = Dll.GetTypes(); foreach (var PotentialConfigType in AllTypes) { if (PotentialConfigType != typeof(CloudStorageBase) && typeof(CloudStorageBase).IsAssignableFrom(PotentialConfigType)) { Result = Activator.CreateInstance(PotentialConfigType) as CloudStorageBase; Handlers.Add(InstanceName, Result); break; } } } } } if (Result == null) { throw new AutomationException("Could not find any modules which provide an implementation of CloudStorageBase."); } } return(Result); }