private static IEnumerable <IPlugin> CreatePlugins(Assembly assembly) { int count = 0; Type[] typesInAssembly = null; try { typesInAssembly = assembly.GetTypes(); } catch (Exception ex) { } foreach (Type type in typesInAssembly) { if (typeof(IPluginProvider).IsAssignableFrom(type)) { IPluginProvider result = Activator.CreateInstance(type) as IPluginProvider; if (result != null) { count++; yield return(result); } } else if (typeof(IPluginUI).IsAssignableFrom(type)) { IPluginUI result = Activator.CreateInstance(type) as IPluginUI; if (result != null) { count++; yield return(result); } } else if (typeof(IPlugin).IsAssignableFrom(type)) { IPlugin result = Activator.CreateInstance(type) as IPlugin; if (result != null) { count++; yield return(result); } } } //if (count == 0) //{ // string availableTypes = string.Join(",", assembly.GetTypes().Select(t => t.FullName)); // throw new ApplicationException( // $"Can't find any type which implements ISRTPlugin in {assembly} from {assembly.Location}.\n" + // $"Available types: {availableTypes}"); //} }
public static IEnumerable <IPlugin> CreatePlugins(Assembly assembly) { int count = 0; Type[] typesInAssembly = null; try { typesInAssembly = assembly.GetTypes(); } catch (Exception ex) { Program.HandleException(ex); yield break; } if (typesInAssembly != null) { foreach (Type type in typesInAssembly) { if (type.GetInterface(nameof(IPluginProvider)) != null) { IPluginProvider result = (IPluginProvider)Activator.CreateInstance(type); // If this throws an exception, the plugin may be targeting a different version of SRTPluginBase. count++; yield return(result); } else if (type.GetInterface(nameof(IPluginUI)) != null) { IPluginUI result = (IPluginUI)Activator.CreateInstance(type); count++; yield return(result); } else if (type.GetInterface(nameof(IPlugin)) != null) { IPlugin result = (IPlugin)Activator.CreateInstance(type); count++; yield return(result); } } } }
private void RemovePlugin(IPluginUI plugin) { foreach (TabItem item in TablesControlMenu.Items.OfType<TabItem>()) { if (item.Header.ToString() == plugin.MenuTitle) { TablesControlMenu.Items.Remove(item); return; } } }
private void RegisterPlugin(IPluginUI plugin) { if (plugin.IsMenuUIAvailable) { TabItem pluginUI = new TabItem(); pluginUI.Style = (Style)FindResource("SimpleTabItem"); pluginUI.Header = plugin.MenuTitle + " (plugin)"; pluginUI.Content = plugin.GetMenuUI(this); TablesControlMenu.Items.Add(pluginUI); } }