diff --git a/Dalamud/Interface/Internal/Windows/Data/DataWindow.cs b/Dalamud/Interface/Internal/Windows/Data/DataWindow.cs
index 4c446cacd..1363c6abe 100644
--- a/Dalamud/Interface/Internal/Windows/Data/DataWindow.cs
+++ b/Dalamud/Interface/Internal/Windows/Data/DataWindow.cs
@@ -19,7 +19,7 @@ internal class DataWindow : Window
{
private readonly IDataWindowWidget[] modules =
{
- new ServerOpcodeWidget(),
+ new ServicesWidget(),
new AddressesWidget(),
new ObjectTableWidget(),
new FateTableWidget(),
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/ServerOpcodeWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/ServerOpcodeWidget.cs
deleted file mode 100644
index b23f3961e..000000000
--- a/Dalamud/Interface/Internal/Windows/Data/Widgets/ServerOpcodeWidget.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using Dalamud.Data;
-using ImGuiNET;
-using Newtonsoft.Json;
-
-namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
-
-///
-/// Widget to display the currently set server opcodes.
-///
-internal class ServerOpcodeWidget : IDataWindowWidget
-{
- private string? serverOpString;
-
- ///
- public string[]? CommandShortcuts { get; init; } = { "opcode", "serveropcode" };
-
- ///
- public string DisplayName { get; init; } = "Server Opcode";
-
- ///
- public bool Ready { get; set; }
-
- ///
- public void Load()
- {
- var dataManager = Service.Get();
-
- if (dataManager.IsDataReady)
- {
- this.serverOpString = JsonConvert.SerializeObject(dataManager.ServerOpCodes, Formatting.Indented);
- this.Ready = true;
- }
- }
-
- ///
- public void Draw()
- {
- ImGui.TextUnformatted(this.serverOpString ?? "serverOpString not initialized");
- }
-}
diff --git a/Dalamud/Interface/Internal/Windows/Data/Widgets/ServicesWidget.cs b/Dalamud/Interface/Internal/Windows/Data/Widgets/ServicesWidget.cs
new file mode 100644
index 000000000..49f3c1b90
--- /dev/null
+++ b/Dalamud/Interface/Internal/Windows/Data/Widgets/ServicesWidget.cs
@@ -0,0 +1,59 @@
+using System.Linq;
+
+using Dalamud.Interface.Colors;
+using Dalamud.Interface.Utility;
+using Dalamud.Interface.Utility.Raii;
+using Dalamud.IoC.Internal;
+using ImGuiNET;
+
+namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
+
+///
+/// Widget for displaying start info.
+///
+internal class ServicesWidget : IDataWindowWidget
+{
+ ///
+ public string[]? CommandShortcuts { get; init; } = { "services" };
+
+ ///
+ public string DisplayName { get; init; } = "Service Container";
+
+ ///
+ public bool Ready { get; set; }
+
+ ///
+ public void Load()
+ {
+ this.Ready = true;
+ }
+
+ ///
+ public void Draw()
+ {
+ var container = Service.Get();
+
+ foreach (var instance in container.Instances)
+ {
+ var hasInterface = container.InterfaceToTypeMap.Values.Any(x => x == instance.Key);
+ var isPublic = instance.Key.IsPublic;
+
+ ImGui.BulletText($"{instance.Key.FullName} ({instance.Key.GetServiceKind()})");
+
+ using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed, !hasInterface))
+ {
+ ImGui.Text(hasInterface
+ ? $"\t => Provided via interface: {container.InterfaceToTypeMap.First(x => x.Value == instance.Key).Key.FullName}"
+ : "\t => NO INTERFACE!!!");
+ }
+
+ if (isPublic)
+ {
+ using var color = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed);
+ ImGui.Text("\t => PUBLIC!!!");
+ }
+
+ ImGuiHelpers.ScaledDummy(2);
+ }
+ }
+}
diff --git a/Dalamud/IoC/Internal/ServiceContainer.cs b/Dalamud/IoC/Internal/ServiceContainer.cs
index db748303e..a82440029 100644
--- a/Dalamud/IoC/Internal/ServiceContainer.cs
+++ b/Dalamud/IoC/Internal/ServiceContainer.cs
@@ -29,6 +29,16 @@ internal class ServiceContainer : IServiceProvider, IServiceType
public ServiceContainer()
{
}
+
+ ///
+ /// Gets a dictionary of all registered instances.
+ ///
+ public IReadOnlyDictionary Instances => this.instances;
+
+ ///
+ /// Gets a dictionary mapping interfaces to their implementations.
+ ///
+ public IReadOnlyDictionary InterfaceToTypeMap => this.interfaceToTypeMap;
///
/// Register a singleton object of any type into the current IOC container.