public ISynchronizer FindSynchronizerByType(Type type)
        {
            if (_factoriesByType.TryGetValue(type, out ISynchronizer factory) == false)
            {
                // Factories are looped in reverse because the last added Factory should be prioritized.
                for (var i = _syncSourceObjectFactories.Count - 1; i >= 0; i--)
                {
                    ISynchronizer syncSourceObjectFactory = _syncSourceObjectFactories[i];
                    if (syncSourceObjectFactory.CanSynchronize(type))
                    {
                        factory = syncSourceObjectFactory;
                        _factoriesByType.Add(type, syncSourceObjectFactory);
                        return(factory);
                    }
                }

                throw new SynchronizerNotFoundException(type);
            }
            return(factory);
        }