public async Task Synchronize(ISynchronizationLogger logger)
        {
            var emailAddressCache = new EmailAddressCache();

            emailAddressCache.Items = _emailAddressCacheDataAccess.Load();

            using (var subLogger = logger.CreateSubLogger("Contacts"))
            {
                await _contactSynchronizer.Synchronize(subLogger, emailAddressCache);
            }

            var idsToQuery = emailAddressCache.GetIdsOfEntriesWithEmptyEmailAddress();

            if (idsToQuery.Length > 0)
            {
                await _loggingCardDavRepositoryDecorator.Get(idsToQuery, NullLoadEntityLogger.Instance, emailAddressCache);
            }
            var cacheItems = emailAddressCache.Items;

            _emailAddressCacheDataAccess.Save(cacheItems);

            var distListContext = new DistributionListSychronizationContext(cacheItems, _outlookSession);

            using (var subLogger = logger.CreateSubLogger("DistLists"))
            {
                await _distributionListSynchronizer.Synchronize(subLogger, distListContext);
            }
        }
        public async Task SynchronizePartial(IEnumerable <IIdWithHints <string, DateTime> > aIds, IEnumerable <IIdWithHints <WebResourceName, string> > bIds, ISynchronizationLogger logger)
        {
            var emailAddressCache = new EmailAddressCache();

            emailAddressCache.Items = _emailAddressCacheDataAccess.Load();

            using (var subLogger = logger.CreateSubLogger("Contacts"))
            {
                await _contactSynchronizer.Synchronize(subLogger, emailAddressCache);
            }

            _emailAddressCacheDataAccess.Save(emailAddressCache.Items);
        }