/// <summary> /// Scan the folder and instance all classes that dlls contain within them /// </summary> /// <param name="TargetFolder">Load in this folder for shared libraries / dlls</param> /// <param name="SharedLibraryContains">any potential plugin to load must have this in the dll name</param> /// <param name="ClassNameContains">only instance classes with this string somewhere in the same</param> public void ScanFolder(string TargetFolder, PluginFilterCheck CheckMe, string SharedLibraryContains, TargetClassLoadName CheckClassInfo, string ClassNameContains) { var Targets = GetValidExternTargets(TargetFolder, CheckMe, SharedLibraryContains); if (Targets.Count > 0) { if (CheckClassInfo == null) { foreach (string TargetSharedLib in Targets) { LoadedFileHandliers.AddRange(LoadAllPlugins(ClassNameContains, TargetSharedLib)); } } else { foreach (string TargetShareLib in Targets) { LoadedFileHandliers.AddRange(LoadAllPlugins(CheckClassInfo, TargetShareLib)); } } } }
protected virtual void Dispose(bool ManagedAlso) { if (ManagedAlso) { foreach (InstancedPluginContainer container in LoadedFileHandliers) { container.Dispose(); } LoadedFileHandliers.Clear(); } IsDisposed = true; }
private void ScanPluginFolder(string TargetFolder) { List <ScanError> ScanErrors = new List <ScanError>(); if (string.IsNullOrEmpty(TargetFolder)) { ///set target folder to current assembly's running location TargetFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); } else { if (TargetFolder.Length > 2) { if (TargetFolder.StartsWith("\\\\")) // possible UNC path. don't assume sub directory { } else { if (TargetFolder.StartsWith("\\")) { TargetFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + TargetFolder; } } } } foreach (string Name in Directory.EnumerateFiles(TargetFolder, "*.dll", SearchOption.TopDirectoryOnly)) { string possName = Name; FileInfo FileData = null; try { FileData = new FileInfo(possName); } catch (IOException e) { // just save the erros until the end; ScanErrors.Add(new ScanError(e, possName)); } if (FileData != null) { LoadedFileHandliers.AddRange(this.LoadFormats(null, possName, "PluginContainer")); } } }