in src/Microsoft.Diagnostics.Runtime/DacImplementation/DacServiceProvider.cs [76:124]
public object? GetService(Type serviceType)
{
if (serviceType == typeof(IAbstractRuntime))
return _runtime ??= new DacRuntime(_clrInfo, _process, _sos, _sos13);
if (serviceType == typeof(IAbstractHeap))
{
IAbstractHeap? heap = _heapHelper;
if (heap is not null)
return heap;
if (_sos.GetGCHeapData(out GCInfo data) && _sos.GetCommonMethodTables(out CommonMethodTables mts) && mts.ObjectMethodTable != 0)
return _heapHelper = new DacHeap(_sos, _sos8, _sos12, _sos16, _dataReader, data, mts);
return null;
}
if (serviceType == typeof(IAbstractTypeHelpers))
{
_moduleHelper ??= new(_sos);
return _typeHelper ??= new DacTypeHelpers(_process, _sos, _sos6, _sos8, _sos14, _dataReader, _moduleHelper);
}
if (serviceType == typeof(IAbstractClrNativeHeaps))
return _nativeHeaps ??= new DacNativeHeaps(_clrInfo, _sos, _sos13, _dataReader);
if (serviceType == typeof(IAbstractModuleHelpers))
return _moduleHelper ??= new DacModuleHelpers(_sos);
if (serviceType == typeof(IAbstractComHelpers))
return _com ??= new DacComHelpers(_sos);
if (serviceType == typeof(IAbstractLegacyThreadPool))
return _threadPool ??= new DacLegacyThreadPool(_sos);
if (serviceType == typeof(IAbstractMethodLocator))
return _methodLocator ??= new DacMethodLocator(_sos);
if (serviceType == typeof(IAbstractThreadHelpers))
return _threadHelper ??= new DacThreadHelpers(_process, _sos, _dataReader);
if (serviceType == typeof(IAbstractDacController))
return this;
if (serviceType == typeof(DacLibrary))
return _dac;
return null;
}