public static IServiceCollection AddPluginFactory(this IServiceCollection services, IConfiguration configuration, IEnumerable <Assembly> assemblies)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }

            //注入配置
            PluginFactoryConfigration factoryConfigration = new PluginFactoryConfigration(configuration);

            services.TryAddSingleton(factoryConfigration);

            // 从配置中获取设置
            PluginFactoryOptions options = createDefaultOptions();

            if (assemblies != null)
            {
                foreach (var a in assemblies)
                {
                    if (a == null)
                    {
                        continue;
                    }
                    options.AddAssembly(a);
                }
            }
            options.ConfigFromConfigration(factoryConfigration);


            services.AddPluginFactory(options, configuration);



            return(services);
        }
Exemplo n.º 2
0
        public void Test1()
        {
            PluginFactoryOptions options  = new PluginFactoryOptions();
            IServiceCollection   services = new ServiceCollection();

            options.PluginPath   = AppDomain.CurrentDomain.BaseDirectory;
            options.FileProvider = new PhysicalFileProvider(options.PluginPath);

            options.AddAssembly(Assembly.GetExecutingAssembly());

            IPluginLoader loader = new DefaultPluginLoader(options, services);

            loader.Load();

            Assert.Equal(4, loader.PluginList.Count);
            var pi = loader.PluginList.First(p => p.PluginType == typeof(TestPluginB));

            Assert.True(pi.IsEnable);
            Assert.False(pi.CanInit);
            Assert.False(pi.CanConfig);

            pi = loader.PluginList.First(p => p.PluginType == typeof(TestPluginC));
            Assert.True(pi.IsEnable);
            Assert.True(pi.CanInit);
            Assert.False(pi.CanConfig);

            pi = loader.PluginList.First(p => p.PluginType == typeof(TestPluginD));
            Assert.True(pi.IsEnable);
            Assert.False(pi.CanInit);
            Assert.True(pi.CanConfig);
            Assert.Equal(typeof(TestPluginDOptions), pi.ConfigType);

            pi = loader.PluginList.First(p => p.PluginType == typeof(TestPluginE));
            Assert.True(pi.IsEnable);
            Assert.True(pi.CanInit);
            Assert.True(pi.CanConfig);
            Assert.Equal(typeof(TestPluginEOptions), pi.ConfigType);
        }