private bool disposedValue = false; // To detect redundant calls

        public TrayIconController(IPluginManager pluginManager, ISettingsProvider settingsProvider, IPlayerStateHistoryRecorder playerStateRecorder, IAutorunManager autorunManager)
        {
            trayIcon                 = CreateTrayIcon();
            this.pluginManager       = pluginManager;
            this.playerStateRecorder = playerStateRecorder;
            this.settingsProvider    = settingsProvider;
            this.autorunManager      = autorunManager;
        }
        private void SettingsForm_Load(object sender, EventArgs e)
        {
            currentSettings = Provider.Settings.Clone();

            // Will check passed properties for null here as they are not yet set in constructor
            var generalSettingsControl = new GeneralSettingsControl()
            {
                PlayerStateRecorder = PlayerStateRecorder ?? throw new ArgumentNullException("MessageBroker"),
                                            GlobalSettings = currentSettings ?? throw new ArgumentNullException("Settings"),
                                                                   Plugins = Plugins ?? throw new ArgumentNullException("Plugins"),
                                                                                   AutorunManager = AutorunManager ?? throw new ArgumentNullException("AutorunManager"),
                                                                                                          Dock = DockStyle.Fill
            };

            settingsControls.Add("General", generalSettingsControl);
            settingsCategoriesListView.Items.Add("General");

            foreach (var plugin in Plugins)
            {
                try
                {
                    var control = plugin.GetPluginSettingsControl(currentSettings);
                    if (control == null)
                    {
                        continue;
                    }
                    control.Dock = DockStyle.Fill;
                    control.PerformLayout();
                    settingsControls.Add(plugin.PluginName, control);
                }
                catch (Exception ex)
                {
                    Log.Error(ex, "Error loading plugin {0}", plugin.PluginId);
                }
            }

            foreach (string category in settingsControls.Keys.OrderBy(x => x))
            {
                if (category != "General")
                {
                    settingsCategoriesListView.Items.Add(category);
                }
            }

            settingsCategoriesListView.SelectedIndices.Add(0);
        }