void RegisterMapping(Type t, AutoServiceClassInfo final, ref bool success) { Debug.Assert(_infos.Count == 0, "Currently, no manual instantiation is available since IEnumerable is not yet handled."); IStObjServiceFinalManualMapping?manual; if (_infos.TryGetValue(final, out var build) && (manual = build.GetFinalMapping(_monitor, _engineMap, _kindComputeFacade, ref success)) != null) { _monitor.Debug($"Map '{t}' -> manual '{final}': '{manual}'."); _engineMap.RegisterServiceFinalManualMapping(t, manual); } else { final.ComputeFinalTypeKind(_monitor, _kindComputeFacade, new Stack <AutoServiceClassInfo>(), ref success); if (success) { _monitor.Debug($"Map '{t}' -> '{final}'."); if (final.IsRealObject) { _engineMap.RegisterServiceFinalObjectMapping(t, final.TypeInfo); } else { _engineMap.RegisterFinalSimpleMapping(t, final); } if (t != final.ClassType) { final.TypeInfo.AddUniqueMapping(t); } } } }
void RegisterClassMapping(AutoServiceClassInfo c, ref bool success) { if (!c.IsRealObject) { Debug.Assert(c.MostSpecialized != null); RegisterMapping(c.ClassType, c.MostSpecialized, ref success); foreach (var s in c.Specializations) { RegisterClassMapping(s, ref success); } } else { _monitor.Debug($"Skipping '{c}' Service class mapping since it is a Real object."); } }
public BuildClassInfo(AutoServiceClassInfo c, IReadOnlyList <ParameterAssignment> a) { Class = c; Assignments = a; }