diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/ReferenceTrackerHost.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/ReferenceTrackerHost.cs index a2e6f9c42d50c1..a3c9561385ea85 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/ReferenceTrackerHost.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/ReferenceTrackerHost.cs @@ -9,15 +9,23 @@ namespace System.Runtime.InteropServices { - internal static class ReferenceTrackerHost + internal readonly unsafe struct ReferenceTrackerHost { [FixedAddressValueType] - private static readonly unsafe IntPtr s_globalHostServices = (IntPtr)Unsafe.AsPointer(in HostServices.Vftbl); + private static readonly ReferenceTrackerHost s_instance = + new((IReferenceTrackerHostVftbl*)Unsafe.AsPointer(in HostServices.Vftbl)); + + private readonly IReferenceTrackerHostVftbl* _vftbl; + + private ReferenceTrackerHost(IReferenceTrackerHostVftbl* vftbl) + { + _vftbl = vftbl; + } // Called when an IReferenceTracker instance is found. - public static unsafe void SetReferenceTrackerHost(IntPtr trackerManager) + public static void SetReferenceTrackerHost(IntPtr trackerManager) { - IReferenceTrackerManager.SetReferenceTrackerHost(trackerManager, (IntPtr)Unsafe.AsPointer(in s_globalHostServices)); + IReferenceTrackerManager.SetReferenceTrackerHost(trackerManager, (IntPtr)Unsafe.AsPointer(in s_instance)); } #pragma warning disable IDE0060, CS3016