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