public override void Unload()
        {
            if (!MyGroupKeys.Any())
            {
                return;
            }

            foreach (var groupKey in MyGroupKeys)
            {
                // Destroy windows within this group
                foreach (var windowVisualizer in WindowVisualizers[groupKey].Values)
                {
                    windowVisualizer.Destroy();
                }

                // Destroy this group
                GroupVisualizers[groupKey].Destroy();

                // Clean up registry to match
                GroupVisualizers.Remove(groupKey);
                WindowVisualizers.Remove(groupKey);
            }

            MyGroupKeys.Clear();

            base.Unload();
        }
        private static DisassemblyGroupVisualizer GetGroupVisualizer(string groupKey)
        {
            // Return if already made
            if (GroupVisualizers.ContainsKey(groupKey))
            {
                return(GroupVisualizers[groupKey]);
            }

            // Create
            var groupVisualizerGo = VisualizerFactory.InstantiateDisassemblyGroup();
            var groupVisualizer   = groupVisualizerGo.GetComponent <DisassemblyGroupVisualizer>();

            // Register
            GroupVisualizers.Add(groupKey, groupVisualizer);
            WindowVisualizers.Add(groupKey, new Dictionary <string, DisassemblyWindowVisualizer>());

            // Return
            return(groupVisualizer);
        }