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