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); }