public object? GetService()

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;
        }