Exemplo n.º 1
0
        private void LoadPluginAssemblies()
        {
            _logger.LogInformation("LoadPluginAssemblies");
            loaders.Clear();

            List <Assembly> assembly = reflectionManager.AssemblyScope;

            List <Type> typesToAdd = new List <Type>();

            foreach (var ass in assembly)
            {
                _logger.LogDebug($"scanning {ass.FullName}..");
                Type[] types = ass.GetTypes();
                foreach (var type in types)
                {
                    if (type.IsPublic)
                    {
                        if (_logger.IsEnabled(LogLevel.Trace))
                        {
                            //   _logger.LogDebug($"Added {type.FullName}..");
                        }
                        typesToAdd.Add(type);
                    }
                }

                typesToAdd.AddRange(types);
            }

            typesToAdd = typesToAdd.Distinct().ToList();

            _logger.LogInformation($"ASSEMBLY LOAD COMPLETED");

            _logger.LogInformation($"plugin folder is {pluginFolder}");

            var pluginsDir = pluginFolder ?? Path.Combine(AppContext.BaseDirectory, "plugins");

            _logger.LogInformation($"Loading plugin using {pluginsDir}");

            var pluginFiles = Directory.GetFiles(pluginsDir, "plugin.config", SearchOption.AllDirectories);

            _logger.LogDebug($"Found  {string.Join(",", pluginFiles)}");

            foreach (var pluginInfo in pluginFiles)
            {
                _logger.LogInformation($"Loading plugin  {pluginInfo}");
                var loader = PluginLoader.CreateFromConfigFile(
                    filePath: pluginInfo,
                    sharedTypes: typesToAdd.ToArray());
                loaders.Add(loader);
            }

            foreach (var loader in loaders)
            {
                reflectionManager.AppendAssemblyToScope(loader.LoadDefaultAssembly());
            }
        }