Beispiel #1
0
        public async Task Initialize()
        {
            var converter = new DelegateToTypeWrapper();

            // Convert this catalog's options to the format supported by Delegate Wrapper.
            // TODO: At some good point change the catalog so that it uses the Delegate Wrapper's options instead of defining its own.
            var delegateToTypeWrapperOptions = ConvertOptions();
            var assembly = converter.CreateType(_multicastDelegate, delegateToTypeWrapperOptions);

            var options = new TypePluginCatalogOptions()
            {
                PluginNameOptions = _options.NameOptions
            };

            if (_options.Tags?.Any() == true)
            {
                options.TypeFinderOptions = new TypeFinderOptions
                {
                    TypeFinderCriterias = new List <TypeFinderCriteria> {
                        TypeFinderCriteriaBuilder.Create().Tag(_options.Tags.ToArray())
                    }
                };
            }

            _catalog = new TypePluginCatalog(assembly, options);
            await _catalog.Initialize();

            IsInitialized = true;
        }
Beispiel #2
0
        public async Task CanOverrideDefaultNamingOptions()
        {
            var options = new TypePluginCatalogOptions()
            {
                PluginNameOptions = new PluginNameOptions()
                {
                    PluginNameGenerator = (opt, type) => "Overridden"
                }
            };

            TypePluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions()
            {
                PluginNameGenerator = (nameOptions, type) => "HelloOptions"
            };

            var catalog  = new TypePluginCatalog(typeof(TypePlugin));
            var catalog2 = new TypePluginCatalog(typeof(TypePlugin), options);

            await catalog.Initialize();

            await catalog2.Initialize();

            var thePlugin = catalog.Single();

            Assert.Equal("HelloOptions", thePlugin.Name);

            var anotherPlugin = catalog2.Single();

            Assert.Equal("Overridden", anotherPlugin.Name);
        }
Beispiel #3
0
        public async Task PluginCanContainManyTags()
        {
            var catalog = new TypePluginCatalog(typeof(TypePlugin),
                                                new TypePluginCatalogOptions()
            {
                TypeFinderOptions = new TypeFinderOptions()
                {
                    TypeFinderCriterias = new List <TypeFinderCriteria>()
                    {
                        TypeFinderCriteriaBuilder.Create().Tag("MyTag_1"),
                        TypeFinderCriteriaBuilder.Create().Tag("AnotherTag")
                    }
                }
            });

            await catalog.Initialize();

            var plugin = catalog.Single();

            var coll = new List <string>()
            {
                "MyTag_1", "AnotherTag"
            };

            Assert.Equal(coll, plugin.Tags);
        }
Beispiel #4
0
        private static async Task CompositeCatalogSample()
        {
            Console.WriteLine("Composite 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. Also create a new plugin catalog from a type
            var typePluginCatalog = new TypePluginCatalog(typeof(MyPlugin));

            // 3. Then combine the catalogs into a composite catalog
            var compositeCatalog = new CompositePluginCatalog(assemblyPluginCatalog, typePluginCatalog);

            // 4. Initialize the composite catalog
            await compositeCatalog.Initialize();

            // 5. Get the plugins from the catalog
            var assemplyPlugins = compositeCatalog.GetPlugins();

            foreach (var plugin in assemplyPlugins)
            {
                if (plugin.Type.Name == "MyPlugin")
                {
                    var inst = (IMyPlugin)Activator.CreateInstance(plugin);
                    inst.Run();
                }
                else
                {
                    var inst = (IPlugin)Activator.CreateInstance(plugin);
                    inst.Run();
                }
            }
        }
        public async Task CanSetNameByAttribute()
        {
            var catalog = new TypePluginCatalog(typeof(TypePluginWithName));
            await catalog.Initialize();

            var thePlugin = catalog.Single();

            Assert.Equal("MyCustomName", thePlugin.Name);
        }
        public async Task NameIsTypeFullName()
        {
            var catalog = new TypePluginCatalog(typeof(TypePlugin));
            await catalog.Initialize();

            var thePlugin = catalog.Single();

            Assert.Equal("RThomasHyde.PluginFramework.Tests.Plugins.TypePlugin", thePlugin.Name);
        }
        public async Task CanInitialize()
        {
            var catalog = new TypePluginCatalog(typeof(TypePlugin));
            await catalog.Initialize();

            var plugins = catalog.GetPlugins();

            Assert.Single(plugins);
        }
Beispiel #8
0
            public async Task TypeCatalogCanTagUsingDefaultOptions()
            {
                var typePluginCatalog = new TypePluginCatalog(typeof(TypePlugin));

                await typePluginCatalog.Initialize();

                var myTaggedPlugins = typePluginCatalog.GetByTag("MyTag_1");

                Assert.Single(myTaggedPlugins);

                TypeFinderOptions.Defaults.TypeFinderCriterias.Clear();
            }
Beispiel #9
0
        private static async Task TypeCatalogSample()
        {
            Console.WriteLine("Type catalog sample");

            var typePluginCatalog = new TypePluginCatalog(typeof(FirstPlugin));
            await typePluginCatalog.Initialize();

            var typePlugin = typePluginCatalog.Get();

            var pluginInstance = (IPlugin)Activator.CreateInstance(typePlugin);

            pluginInstance.Run();
        }
        public async Task CanConfigureNameResolver()
        {
            var catalog = new TypePluginCatalog(typeof(TypePlugin), configure =>
            {
                configure.PluginNameGenerator = (opt, type) => "HelloOptions";
            });

            await catalog.Initialize();

            var thePlugin = catalog.Single();

            Assert.Equal("HelloOptions", thePlugin.Name);
        }
Beispiel #11
0
        public async Task CanConfigureDefaultNamingOptions()
        {
            TypePluginCatalogOptions.Defaults.PluginNameOptions = new PluginNameOptions()
            {
                PluginNameGenerator = (nameOptions, type) => "HelloOptions"
            };

            var catalog = new TypePluginCatalog(typeof(TypePlugin));

            await catalog.Initialize();

            var thePlugin = catalog.Single();

            Assert.Equal("HelloOptions", thePlugin.Name);
        }
Beispiel #12
0
        public async Task CanConfigureNamingOptions()
        {
            var options = new TypePluginCatalogOptions()
            {
                PluginNameOptions = new PluginNameOptions()
                {
                    PluginNameGenerator = (opt, type) => "HelloOptions"
                }
            };

            var catalog = new TypePluginCatalog(typeof(TypePlugin), options);

            await catalog.Initialize();

            var thePlugin = catalog.Single();

            Assert.Equal("HelloOptions", thePlugin.Name);
        }
Beispiel #13
0
            public async Task CanTagUsingDefaultOptions()
            {
                var assemblyPluginCatalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll");
                var typePluginCatalog     = new TypePluginCatalog(typeof(TypePlugin));

                var compositeCatalog = new CompositePluginCatalog(assemblyPluginCatalog, typePluginCatalog);

                await compositeCatalog.Initialize();

                var customTaggedPlugins = compositeCatalog.GetByTag("CustomTag");

                Assert.Equal(2, customTaggedPlugins.Count);

                var myTaggedPlugins = compositeCatalog.GetByTag("MyTag_1");

                Assert.Single(myTaggedPlugins);

                TypeFinderOptions.Defaults.TypeFinderCriterias.Clear();
            }
Beispiel #14
0
        public async Task CanTagTypePlugin()
        {
            var catalog = new TypePluginCatalog(typeof(TypePlugin),
                                                new TypePluginCatalogOptions()
            {
                TypeFinderOptions = new TypeFinderOptions()
                {
                    TypeFinderCriterias = new List <TypeFinderCriteria>()
                    {
                        TypeFinderCriteriaBuilder.Create().Tag("MyTag_1"),
                        TypeFinderCriteriaBuilder.Create().Tag("AnotherTag")
                    }
                }
            });

            await catalog.Initialize();

            var plugin = catalog.Single();

            Assert.Equal("MyTag_1", plugin.Tag);
        }