コード例 #1
0
            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);
                }
            }
コード例 #2
0
        public async Task CanInitialize()
        {
            var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll");
            await catalog.Initialize();

            var allPlugins = catalog.GetPlugins();

            Assert.NotEmpty(allPlugins);
        }
コード例 #3
0
            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();
            }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
            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);
                }
            }
コード例 #8
0
        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());
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
            }
        }
コード例 #11
0
        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);
            }
        }
コード例 #12
0
ファイル: Program.cs プロジェクト: yucadag/PluginFramework
        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();
            }
        }
コード例 #13
0
        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);
            }
        }
コード例 #14
0
 public List <Plugin> GetPlugins()
 {
     return(_catalog.GetPlugins());
 }