public async Task Initialize() { var foundFiles = new List <string>(); foreach (var searchPattern in _options.SearchPatterns) { var dllFiles = Directory.GetFiles(_folderPath, searchPattern, _options.IncludeSubfolders ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly); foundFiles.AddRange(dllFiles); } foundFiles = foundFiles.Distinct().ToList(); foreach (var assemblyPath in foundFiles) { // Assemblies are treated as readonly as long as possible var isPluginAssembly = IsPluginAssembly(assemblyPath); if (isPluginAssembly == false) { continue; } var assemblyCatalogOptions = new AssemblyPluginOptions { PluginLoadContextOptions = _options.PluginLoadContextOptions, TypeFinderOptions = _options.TypeFinderOptions, PluginNameOptions = _options.PluginNameOptions }; // We are actually just delegating the responsibility from FolderPluginCatalog to AssemblyPluginCatalog. var assemblyCatalog = new AssemblyPluginProviders(assemblyPath, assemblyCatalogOptions); await assemblyCatalog.Initialize(); _plugins.Add(assemblyCatalog); } IsInitialized = true; }
public AssemblyPluginProviders(string assemblyPath = null, Assembly assembly = null, Predicate <Type> filter = null, Dictionary <string, Predicate <Type> > taggedFilters = null, Action <TypeFinderCriteriaBuilder> configureFinder = null, TypeFinderCriteria criteria = null, AssemblyPluginOptions options = null) { if (assembly != null) { _assembly = assembly; _assemblyPath = _assembly.Location; } else if (!string.IsNullOrWhiteSpace(assemblyPath)) { _assemblyPath = assemblyPath; } else { throw new ArgumentNullException($"{nameof(assembly)} or {nameof(assemblyPath)} must be set."); } _options = options ?? new AssemblyPluginOptions(); SetFilters(filter, taggedFilters, criteria, configureFinder); }
public AssemblyPluginProviders(Assembly assembly, Dictionary <string, Predicate <Type> > taggedFilters, AssemblyPluginOptions options = null) : this(null, assembly, null, taggedFilters, null, null, options) { }
public AssemblyPluginProviders(Assembly assembly, Predicate <Type> filter = null, AssemblyPluginOptions options = null) : this(null, assembly, filter, null, null, null, options) { }
public AssemblyPluginProviders(string assemblyPath, Predicate <Type> filter = null, AssemblyPluginOptions options = null) : this(assemblyPath, null, filter, null, null, null, options) { }
public AssemblyPluginProviders(Assembly assembly, Action <TypeFinderCriteriaBuilder> configureFinder = null, AssemblyPluginOptions options = null) : this(null, assembly, null, null, configureFinder, null, options) { }
public AssemblyPluginProviders(string assemblyPath, Action <TypeFinderCriteriaBuilder> configureFinder = null, AssemblyPluginOptions options = null) : this(assemblyPath, null, null, null, configureFinder, null, options) { }
public AssemblyPluginProviders(string assemblyPath, TypeFinderCriteria criteria = null, AssemblyPluginOptions options = null) : this(assemblyPath, null, null, null, null, criteria, options) { }
public AssemblyPluginProviders(Assembly assembly, AssemblyPluginOptions options = null) : this(null, assembly, null, null, null, null, options) { }
public AssemblyPluginProviders(string assemblyPath, AssemblyPluginOptions options = null) : this(assemblyPath, null, null, null, null, null, options) { }