Exemple #1
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();
                }
            }
        }
Exemple #2
0
        private async Task AddCalculationOperators()
        {
            var folderPluginCatalog = new FolderPluginCatalog(@"..\..\..\..\Shared\Weikio.PluginFramework.Samples.SharedPlugins\bin\debug\netcoreapp3.1",
                                                              type => { type.Implements <IOperator>(); });

            var assemblyPluginCatalog = new AssemblyPluginCatalog(typeof(Form1).Assembly, type => typeof(IOperator).IsAssignableFrom(type));

            var pluginCatalog = new CompositePluginCatalog(folderPluginCatalog, assemblyPluginCatalog);
            await pluginCatalog.Initialize();

            var allPlugins = pluginCatalog.GetPlugins();

            foreach (var plugin in allPlugins)
            {
                listBox1.Items.Add(plugin);
            }
        }
Exemple #3
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();
            }
        private async void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
        {
            var folderPluginCatalog = new FolderPluginCatalog(@"..\..\..\..\Shared\Weikio.PluginFramework.Samples.SharedPlugins\bin\debug\netcoreapp3.1", type =>
            {
                type.Implements <IOperator>();
            });

            var assemblyPluginCatalog = new AssemblyPluginCatalog(typeof(MainWindow).Assembly, type => typeof(IOperator).IsAssignableFrom(type));

            var pluginCatalog = new CompositePluginCatalog(folderPluginCatalog, assemblyPluginCatalog);
            await pluginCatalog.Initialize();

            var allPlugins = pluginCatalog.GetPlugins();

            foreach (var plugin in allPlugins)
            {
                _plugins.Add(plugin);
            }

            PluginsList.ItemsSource = _plugins;
        }