From c5bce3b8ccd41a9dfdd0d037b28f7a234e678edb Mon Sep 17 00:00:00 2001 From: Shannon Date: Mon, 28 Apr 2014 17:46:05 +1000 Subject: [PATCH] completes: U4-4769 Remove the circular references from services for calls like ToXml which then calls into the PackagingService --- src/Umbraco.Core/Services/MemberService.cs | 40 ++++++++++++++++----- src/Umbraco.Core/Services/ServiceContext.cs | 6 ++-- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index 98e426d931..306db69d6a 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -28,7 +28,8 @@ namespace Umbraco.Core.Services private readonly RepositoryFactory _repositoryFactory; private readonly IMemberGroupService _memberGroupService; private readonly IDatabaseUnitOfWorkProvider _uowProvider; - + private readonly EntityXmlSerializer _entitySerializer = new EntityXmlSerializer(); + private readonly IDataTypeService _dataTypeService; private static readonly ReaderWriterLockSlim Locker = new ReaderWriterLockSlim(); public MemberService(RepositoryFactory repositoryFactory, IMemberGroupService memberGroupService) @@ -49,6 +50,24 @@ namespace Umbraco.Core.Services _repositoryFactory = repositoryFactory; _memberGroupService = memberGroupService; _uowProvider = provider; + _dataTypeService = new DataTypeService(provider, repositoryFactory); + } + + public MemberService(IDatabaseUnitOfWorkProvider provider, IMemberGroupService memberGroupService, IDataTypeService dataTypeService) + : this(provider, new RepositoryFactory(), memberGroupService, dataTypeService) + { + + } + + public MemberService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, IMemberGroupService memberGroupService, IDataTypeService dataTypeService) + { + if (provider == null) throw new ArgumentNullException("provider"); + if (repositoryFactory == null) throw new ArgumentNullException("repositoryFactory"); + if (memberGroupService == null) throw new ArgumentNullException("memberGroupService"); + _repositoryFactory = repositoryFactory; + _memberGroupService = memberGroupService; + _uowProvider = provider; + _dataTypeService = dataTypeService; } #region IMemberService Implementation @@ -724,7 +743,7 @@ namespace Umbraco.Core.Services uow.Commit(); //insert the xml - var xml = member.ToXml(); + var xml = _entitySerializer.Serialize(_dataTypeService, member); CreateAndSaveMemberXml(xml, member.Id, uow.Database); } @@ -831,7 +850,7 @@ namespace Umbraco.Core.Services repository.AddOrUpdate(entity); uow.Commit(); - var xml = entity.ToXml(); + var xml = _entitySerializer.Serialize(_dataTypeService, entity); CreateAndSaveMemberXml(xml, entity.Id, uow.Database); } @@ -841,9 +860,11 @@ namespace Umbraco.Core.Services public void Save(IEnumerable entities, bool raiseEvents = true) { + var asArray = entities.ToArray(); + if (raiseEvents) { - if (Saving.IsRaisedEventCancelled(new SaveEventArgs(entities), this)) + if (Saving.IsRaisedEventCancelled(new SaveEventArgs(asArray), this)) return; } using (new WriteLock(Locker)) @@ -851,7 +872,7 @@ namespace Umbraco.Core.Services var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateMemberRepository(uow)) { - foreach (var member in entities) + foreach (var member in asArray) { repository.AddOrUpdate(member); } @@ -859,14 +880,15 @@ namespace Umbraco.Core.Services //commit the whole lot in one go uow.Commit(); - foreach (var member in entities) + foreach (var member in asArray) { - CreateAndSaveMemberXml(member.ToXml(), member.Id, uow.Database); + var xml = _entitySerializer.Serialize(_dataTypeService, member); + CreateAndSaveMemberXml(xml, member.Id, uow.Database); } } if (raiseEvents) - Saved.RaiseEvent(new SaveEventArgs(entities, false), this); + Saved.RaiseEvent(new SaveEventArgs(asArray, false), this); } } @@ -1072,7 +1094,7 @@ namespace Umbraco.Core.Services var xmlItems = new List(); foreach (var c in list) { - var xml = c.ToXml(); + var xml = _entitySerializer.Serialize(_dataTypeService, c); xmlItems.Add(new ContentXmlDto { NodeId = c.Id, Xml = xml.ToString(SaveOptions.None) }); } diff --git a/src/Umbraco.Core/Services/ServiceContext.cs b/src/Umbraco.Core/Services/ServiceContext.cs index 2fc2224d94..db31cf7e14 100644 --- a/src/Umbraco.Core/Services/ServiceContext.cs +++ b/src/Umbraco.Core/Services/ServiceContext.cs @@ -121,13 +121,13 @@ namespace Umbraco.Core.Services _userService = new Lazy(() => new UserService(provider, repositoryFactory.Value)); if (_memberService == null) - _memberService = new Lazy(() => new MemberService(provider, repositoryFactory.Value, _memberGroupService.Value)); + _memberService = new Lazy(() => new MemberService(provider, repositoryFactory.Value, _memberGroupService.Value, _dataTypeService.Value)); if (_contentService == null) - _contentService = new Lazy(() => new ContentService(provider, repositoryFactory.Value, publishingStrategy, DataTypeService)); + _contentService = new Lazy(() => new ContentService(provider, repositoryFactory.Value, publishingStrategy, _dataTypeService.Value)); if (_mediaService == null) - _mediaService = new Lazy(() => new MediaService(provider, repositoryFactory.Value, DataTypeService)); + _mediaService = new Lazy(() => new MediaService(provider, repositoryFactory.Value, _dataTypeService.Value)); if (_contentTypeService == null) _contentTypeService = new Lazy(() => new ContentTypeService(provider, repositoryFactory.Value, _contentService.Value, _mediaService.Value));