コード例 #1
0
ファイル: Program.cs プロジェクト: VideoGameRoulette/SRTHost
        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}");
            //}
        }
コード例 #2
0
        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);
                    }
                }
            }
        }
コード例 #3
0
 private void RemovePlugin(IPluginUI plugin)
 {
     foreach (TabItem item in TablesControlMenu.Items.OfType<TabItem>()) {
         if (item.Header.ToString() == plugin.MenuTitle) {
             TablesControlMenu.Items.Remove(item);
             return;
         }
     }
 }
コード例 #4
0
        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);
            }
        }