コード例 #1
0
        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;
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 public AssemblyPluginProviders(Assembly assembly, Dictionary <string, Predicate <Type> > taggedFilters,
                                AssemblyPluginOptions options = null) : this(null, assembly, null, taggedFilters, null, null, options)
 {
 }
コード例 #4
0
 public AssemblyPluginProviders(Assembly assembly, Predicate <Type> filter = null, AssemblyPluginOptions options = null) : this(null, assembly,
                                                                                                                                filter, null, null, null, options)
 {
 }
コード例 #5
0
 public AssemblyPluginProviders(string assemblyPath, Predicate <Type> filter = null, AssemblyPluginOptions options = null) : this(assemblyPath, null,
                                                                                                                                  filter, null, null, null, options)
 {
 }
コード例 #6
0
 public AssemblyPluginProviders(Assembly assembly, Action <TypeFinderCriteriaBuilder> configureFinder = null,
                                AssemblyPluginOptions options = null) : this(null,
                                                                             assembly, null, null, configureFinder, null, options)
 {
 }
コード例 #7
0
 public AssemblyPluginProviders(string assemblyPath, Action <TypeFinderCriteriaBuilder> configureFinder = null,
                                AssemblyPluginOptions options = null) : this(assemblyPath,
                                                                             null, null, null, configureFinder, null, options)
 {
 }
コード例 #8
0
 public AssemblyPluginProviders(string assemblyPath, TypeFinderCriteria criteria = null, AssemblyPluginOptions options = null) : this(assemblyPath,
                                                                                                                                      null, null, null,
                                                                                                                                      null, criteria, options)
 {
 }
コード例 #9
0
 public AssemblyPluginProviders(Assembly assembly, AssemblyPluginOptions options = null) : this(null, assembly, null, null, null, null, options)
 {
 }
コード例 #10
0
 public AssemblyPluginProviders(string assemblyPath, AssemblyPluginOptions options = null) : this(assemblyPath, null, null, null, null, null,
                                                                                                  options)
 {
 }