public async Task CanOverrideDefaultNamingOptions() { var options = new AssemblyPluginCatalogOptions() { PluginNameOptions = new PluginNameOptions() { PluginNameGenerator = (nameOptions, type) => type.FullName + "Overridden" } }; var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll"); var catalog2 = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly2.dll", options); await catalog.Initialize(); await catalog2.Initialize(); var catalog1Plugins = catalog.GetPlugins(); foreach (var plugin in catalog1Plugins) { Assert.EndsWith("Modified", plugin.Name); } var catalog2Plugins = catalog2.GetPlugins(); foreach (var plugin in catalog2Plugins) { Assert.EndsWith("Overridden", plugin.Name); } }
public async Task CanInitialize() { var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll"); await catalog.Initialize(); var allPlugins = catalog.GetPlugins(); Assert.NotEmpty(allPlugins); }
public async Task DefaultTagsWithAssemblyCatalogTypeShouldNotDuplicatePlugins() { var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\JsonNew\netstandard2.0\JsonNetNew.dll"); await catalog.Initialize(); Assert.Single(catalog.GetPlugins()); var plugin = catalog.Get(); Assert.Equal(2, plugin.Tags.Count); TypeFinderOptions.Defaults.TypeFinderCriterias.Clear(); }
public async Task CanGetPluginsByAttribute() { var catalog = new AssemblyPluginCatalog(typeof(TypeFinderTests).Assembly, configure => { configure.HasAttribute(typeof(MyPluginAttribute)); }); await catalog.Initialize(); Assert.Equal(2, catalog.GetPlugins().Count); }
public async Task ByDefaultOnlyContainsPublicNonAbstractClasses() { var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll"); await catalog.Initialize(); var allPlugins = catalog.GetPlugins(); var plugin = allPlugins.Single(); Assert.False(plugin.Type.IsAbstract); Assert.False(plugin.Type.IsInterface); }
public async Task CanInitializeWithCriteria() { var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll", configure => { configure.HasName("*Plugin"); }); await catalog.Initialize(); var allPlugins = catalog.GetPlugins(); Assert.Single(allPlugins); }
public async Task CanConfigureDefaultNamingOptions() { var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll"); await catalog.Initialize(); var allPlugins = catalog.GetPlugins(); foreach (var plugin in allPlugins) { Assert.EndsWith("Modified", plugin.Name); } }
public async Task CanGetPluginsByMultipleCriteria() { var catalog = new AssemblyPluginCatalog(typeof(TypeFinderTests).Assembly, configure => { configure.HasAttribute(typeof(MyPluginAttribute)) .IsAbstract(true) .HasName(nameof(AbstractPluginWithAttribute)); }); await catalog.Initialize(); Assert.Single(catalog.GetPlugins()); }
public async Task CanIncludeAbstractClassesUsingCriteria() { var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll", builder => { builder.IsAbstract(true); }); await catalog.Initialize(); var allPlugins = catalog.GetPlugins(); var plugin = allPlugins.Single(); Assert.True(plugin.Type.IsAbstract); }
public async Task CanTagAssemblyPluginUsingBuilder() { var catalog = new AssemblyPluginCatalog(typeof(TypePlugin).Assembly, builder => { builder.AssignableTo(typeof(TypePlugin)) .Tag("operator"); }); await catalog.Initialize(); var allPlugins = catalog.GetPlugins(); foreach (var plugin in allPlugins) { Assert.Equal("operator", plugin.Tag); } }
public async Task CanTagAssemblyPlugin() { var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll", null, taggedFilters: new Dictionary <string, Predicate <Type> >() { { "CustomTag", type => true } }); await catalog.Initialize(); var allPlugins = catalog.GetPlugins(); foreach (var plugin in allPlugins) { Assert.Equal("CustomTag", plugin.Tag); } }
private static async Task AssemblyCatalogSample() { Console.WriteLine("Assembly catalog sample"); // 1. Create a new plugin catalog from the current assembly var assemblyPluginCatalog = new AssemblyPluginCatalog(typeof(Program).Assembly, type => typeof(IPlugin).IsAssignableFrom(type)); // 2. Initialize the catalog await assemblyPluginCatalog.Initialize(); // 3. Get the plugins from the catalog var assemplyPlugins = assemblyPluginCatalog.GetPlugins(); foreach (var plugin in assemplyPlugins) { var inst = (IPlugin)Activator.CreateInstance(plugin); inst.Run(); } }
public async Task CanConfigureNamingOptions() { var options = new AssemblyPluginCatalogOptions() { PluginNameOptions = new PluginNameOptions() { PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified" } }; var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll", options); await catalog.Initialize(); var allPlugins = catalog.GetPlugins(); foreach (var plugin in allPlugins) { Assert.EndsWith("Modified", plugin.Name); } }
public List <Plugin> GetPlugins() { return(_catalog.GetPlugins()); }