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(); } } }
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); } }
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; }
public List <Plugin> GetPlugins() { return(internalCatalog.GetPlugins()); }