private void LoadPlugin(AzusaPlugin instance) { context.Splash.SetLabel(String.Format("Lade Plug-In:" + instance.DisplayName)); instance.OnLoad(); if (instance.IsExecutable) { ToolStripButton tsb = new ToolStripButton(instance.DisplayName); tsb.Click += delegate(object sender, EventArgs args) { instance.Execute(); }; context.MainForm.plugInsToolStripMenuItem.DropDownItems.Add(tsb); context.MainForm.plugInsToolStripMenuItem.Visible = true; } context.Plugins.Add(instance); }
private void ScanPluginAssembly(AzusaContext context, Assembly assembly) { Type[] exportedTypes = assembly.GetExportedTypes(); Array.Sort(exportedTypes, new TypeComparer()); Type pluginType = typeof(AzusaPlugin); Type imageAcquisitionPluginType = typeof(IImageAcquisitionPlugin); Type sidecarViewerPluginType = typeof(ISidecarDisplayControl); foreach (Type exportedType in exportedTypes) { if (exportedType.IsAbstract) { continue; } if (exportedType.IsInterface) { continue; } if (pluginType.IsAssignableFrom(exportedType)) { try { AzusaPlugin instance = (AzusaPlugin)Activator.CreateInstance(exportedType); LoadPlugin(instance); } catch (Exception e) { context.Splash.SetLabel(String.Format("Konnte Plug-In {0} nicht starten: {1}", exportedType.Name, e)); } } else if (imageAcquisitionPluginType.IsAssignableFrom(exportedType)) { IImageAcquisitionPlugin instance = (IImageAcquisitionPlugin)Activator.CreateInstance(exportedType); context.ImageAcquisitionPlugins.Add(instance); } else if (sidecarViewerPluginType.IsAssignableFrom(exportedType)) { ISidecarDisplayControl instance = (ISidecarDisplayControl)Activator.CreateInstance(exportedType); Guid guid = instance.DisplayControlUuid; context.SidecarDisplayControls.Add(guid, exportedType); } } }