completes: U4-4769 Remove the circular references from services for calls like ToXml which then calls into the PackagingService

This commit is contained in:
Shannon
2014-04-28 17:46:05 +10:00
parent b4286a7d4e
commit c5bce3b8cc
2 changed files with 34 additions and 12 deletions

View File

@@ -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<IMember> entities, bool raiseEvents = true)
{
var asArray = entities.ToArray();
if (raiseEvents)
{
if (Saving.IsRaisedEventCancelled(new SaveEventArgs<IMember>(entities), this))
if (Saving.IsRaisedEventCancelled(new SaveEventArgs<IMember>(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<IMember>(entities, false), this);
Saved.RaiseEvent(new SaveEventArgs<IMember>(asArray, false), this);
}
}
@@ -1072,7 +1094,7 @@ namespace Umbraco.Core.Services
var xmlItems = new List<ContentXmlDto>();
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) });
}

View File

@@ -121,13 +121,13 @@ namespace Umbraco.Core.Services
_userService = new Lazy<IUserService>(() => new UserService(provider, repositoryFactory.Value));
if (_memberService == null)
_memberService = new Lazy<IMemberService>(() => new MemberService(provider, repositoryFactory.Value, _memberGroupService.Value));
_memberService = new Lazy<IMemberService>(() => new MemberService(provider, repositoryFactory.Value, _memberGroupService.Value, _dataTypeService.Value));
if (_contentService == null)
_contentService = new Lazy<IContentService>(() => new ContentService(provider, repositoryFactory.Value, publishingStrategy, DataTypeService));
_contentService = new Lazy<IContentService>(() => new ContentService(provider, repositoryFactory.Value, publishingStrategy, _dataTypeService.Value));
if (_mediaService == null)
_mediaService = new Lazy<IMediaService>(() => new MediaService(provider, repositoryFactory.Value, DataTypeService));
_mediaService = new Lazy<IMediaService>(() => new MediaService(provider, repositoryFactory.Value, _dataTypeService.Value));
if (_contentTypeService == null)
_contentTypeService = new Lazy<IContentTypeService>(() => new ContentTypeService(provider, repositoryFactory.Value, _contentService.Value, _mediaService.Value));