public void Test3()
        {
            Dictionary <string, string> dic = new Dictionary <string, string>()
            {
                { "Plugins:PluginA:Test", "A" }
            };
            var config = new ConfigurationBuilder()
                         .AddInMemoryCollection(dic)
                         .Build();

            PluginFactoryConfigration rootConfig = new PluginFactoryConfigration(config);

            IServiceCollection services = new ServiceCollection()
                                          .AddSingleton(rootConfig)
                                          .AddSingleton(typeof(IPluginConfigrationProvider <>), typeof(PluginConfigrationProvider <>))
                                          .AddOptions()
                                          .ConfigureOptions <PluginConfigrationOptions <PluginA, PluginAOptions> >()
                                          .AddSingleton(typeof(IOptionsChangeTokenSource <>), typeof(ConfigurationChangeTokenSource <>))
                                          .AddSingleton <IPlugin, PluginA>();

            // 必须
            services.TryAddSingleton <IConfiguration>(config);

            var sp     = services.BuildServiceProvider();
            var plugin = sp.GetRequiredService <IPlugin>() as PluginA;

            Assert.Equal("A", plugin.Test);

            config["Plugins:PluginA:Test"] = "B";
            config.Reload();

            Assert.Equal("B", plugin.Test);
        }
        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);
        }
        public void Test4()
        {
            Dictionary <string, string> dic = new Dictionary <string, string>()
            {
            };
            var config = new ConfigurationBuilder()
                         .AddInMemoryCollection(dic)
                         .Build();

            PluginFactoryConfigration            factoryConfig = new PluginFactoryConfigration(config);
            PluginConfigrationProvider <PluginB> provider      = new PluginConfigrationProvider <PluginB>(factoryConfig);

            Assert.Empty(provider.Configuration.GetChildren());
        }
        public void Test2()
        {
            Dictionary <string, string> dic = new Dictionary <string, string>()
            {
                { "Plugins:PluginB:Test", "B" }
            };
            var config = new ConfigurationBuilder()
                         .AddInMemoryCollection(dic)
                         .Build();

            PluginFactoryConfigration            factoryConfig = new PluginFactoryConfigration(config);
            PluginConfigrationProvider <PluginB> provider      = new PluginConfigrationProvider <PluginB>(factoryConfig);

            Assert.Equal("B", provider.Configuration["Test"]);
        }
        public void Test1()
        {
            Dictionary <string, string> dic = new Dictionary <string, string>()
            {
                { "Plugins:Xfrogcn.PluginFactory.Abstractions.Test.PluginConfigrationProviderTest.PluginA:Test", "A" }
            };
            var config = new ConfigurationBuilder()
                         .AddInMemoryCollection(dic)
                         .Build();

            PluginFactoryConfigration            factoryConfig = new PluginFactoryConfigration(config);
            PluginConfigrationProvider <PluginA> provider      = new PluginConfigrationProvider <PluginA>(factoryConfig);

            Assert.Equal("A", provider.Configuration["Test"]);
        }
        public void Test2()
        {
            Dictionary <string, string> dic = new Dictionary <string, string>()
            {
                { "Plugins:PluginA:Test", "A" }
            };
            var config = new ConfigurationBuilder()
                         .AddInMemoryCollection(dic)
                         .Build();

            PluginFactoryConfigration rootConfig = new PluginFactoryConfigration(config);

            IServiceCollection services = new ServiceCollection()
                                          .AddSingleton(rootConfig)
                                          .AddSingleton(typeof(IPluginConfigrationProvider <>), typeof(PluginConfigrationProvider <>))
                                          .AddOptions()
                                          .ConfigureOptions <PluginConfigrationOptions <PluginA, PluginAOptions> >();

            var sp      = services.BuildServiceProvider();
            var options = sp.GetRequiredService <IOptions <PluginAOptions> >();

            Assert.Equal("A", options.Value.Test);
        }