protected Task ScanForContentHandlers() { Task scan = Task.Run(() => { try { string[] assemblySearchPatterns = DefaultConfiguration.GetAppSetting("AssemblySearchPattern", "*ContentHandlers.dll").DelimitSplit(",", true); DirectoryInfo entryDir = Assembly.GetEntryAssembly().GetFileInfo().Directory; DirectoryInfo sysAssemblies = DataSettings.GetSysAssemblyDirectory(); List <FileInfo> files = new List <FileInfo>(); foreach (string assemblySearchPattern in assemblySearchPatterns) { files.AddRange(entryDir.GetFiles(assemblySearchPattern)); if (sysAssemblies.Exists) { files.AddRange(sysAssemblies.GetFiles(assemblySearchPattern)); } } Parallel.ForEach(files, LoadCustomHandlers); } catch (Exception ex) { Logger.AddEntry("Exception occurred scanning for custom content handlers: {0}", ex, ex.Message); } }); return(scan); }
public Type ResolveType(ServiceTypeIdentifier typeIdentifier) { string localAssemblyPath = Path.Combine(DataSettings.GetSysAssemblyDirectory().FullName, typeIdentifier.AssemblyName); FileInfo assemblyFile = FileService.RestoreFile(typeIdentifier.AssemblyFileHash, localAssemblyPath); Assembly assembly = Assembly.LoadFile(localAssemblyPath); Type result = assembly.GetTypes().Where(t => t.Name.Equals(typeIdentifier.TypeName) && t.Namespace.Equals(typeIdentifier.Namespace)).FirstOrDefault(); return(result); }
protected Task ScanForServiceRegistryContainers() { return(Task.Run(() => { try { DirectoryInfo entryDir = Assembly.GetEntryAssembly().GetFileInfo().Directory; DirectoryInfo sysAssemblies = DataSettings.GetSysAssemblyDirectory(); DirectoryInfo[] dirs = new DirectoryInfo[] { entryDir, sysAssemblies }; string[] searchPatterns = AssemblySearchPattern.DelimitSplit(",", true); List <FileInfo> files = searchPatterns.SelectMany(searchPattern => { List <FileInfo> tmp = new List <FileInfo>(); foreach (DirectoryInfo dir in dirs) { if (dir.Exists) { tmp.AddRange(dir.GetFiles(searchPattern)); } } return tmp; }).ToList(); _scanResults.Clear(); Parallel.ForEach(files, file => { try { Assembly assembly = Assembly.LoadFile(file.FullName); foreach (Type type in assembly.GetTypes().Where(t => t.HasCustomAttributeOfType <ServiceRegistryContainerAttribute>())) { _scanResults.Add(type, RegisterServiceRegistryContainer(type)); } } catch (Exception ex) { Logger.AddEntry("Exception scanning for ServiceRegistries in file ({0})", ex, file.FullName); } }); } catch (Exception ex) { Logger.AddEntry("Exception occurred scanning for service registry containers: {0}", ex, ex.Message); } })); }