diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs index 717449bfc3..a6179464d5 100644 --- a/src/Umbraco.Core/Services/ContentService.cs +++ b/src/Umbraco.Core/Services/ContentService.cs @@ -24,18 +24,22 @@ namespace Umbraco.Core.Services private readonly RepositoryFactory _repositoryFactory; private HttpContextBase _httpContext; - public ContentService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory) - : this(provider, new PublishingStrategy(), repositoryFactory) + public ContentService(RepositoryFactory repositoryFactory) + : this(new PetaPocoUnitOfWorkProvider(), repositoryFactory, new PublishingStrategy()) {} - internal ContentService(IDatabaseUnitOfWorkProvider provider, IPublishingStrategy publishingStrategy, RepositoryFactory repositoryFactory) + public ContentService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory) + : this(provider, repositoryFactory, new PublishingStrategy()) + { } + + internal ContentService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, IPublishingStrategy publishingStrategy) { _uowProvider = provider; _publishingStrategy = publishingStrategy; _repositoryFactory = repositoryFactory; } - internal ContentService(IDatabaseUnitOfWorkProvider provider, IPublishingStrategy publishingStrategy, RepositoryFactory repositoryFactory, IUserService userService) + internal ContentService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, IPublishingStrategy publishingStrategy, IUserService userService) { _uowProvider = provider; _publishingStrategy = publishingStrategy; @@ -100,7 +104,6 @@ namespace Umbraco.Core.Services { return repository.Get(id); } - } /// diff --git a/src/Umbraco.Core/Services/ContentTypeService.cs b/src/Umbraco.Core/Services/ContentTypeService.cs index 082f9f16f7..1ff4a222ea 100644 --- a/src/Umbraco.Core/Services/ContentTypeService.cs +++ b/src/Umbraco.Core/Services/ContentTypeService.cs @@ -5,11 +5,9 @@ using System.Text; using System.Web; using Umbraco.Core.Auditing; using Umbraco.Core.Configuration; -using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Querying; -using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.UnitOfWork; namespace Umbraco.Core.Services @@ -23,9 +21,7 @@ namespace Umbraco.Core.Services private readonly IContentService _contentService; private readonly IMediaService _mediaService; private readonly IUserService _userService; - private readonly IDatabaseUnitOfWork _unitOfWork; - private readonly IContentTypeRepository _contentTypeRepository; - private readonly IMediaTypeRepository _mediaTypeRepository; + private readonly IDatabaseUnitOfWorkProvider _uowProvider; private HttpContextBase _httpContext; public ContentTypeService(RepositoryFactory repositoryFactory, IContentService contentService, IMediaService mediaService) @@ -34,23 +30,19 @@ namespace Umbraco.Core.Services public ContentTypeService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, IContentService contentService, IMediaService mediaService) { + _uowProvider = provider; _repositoryFactory = repositoryFactory; _contentService = contentService; _mediaService = mediaService; - _unitOfWork = provider.GetUnitOfWork(); - _contentTypeRepository = _repositoryFactory.CreateContentTypeRepository(_unitOfWork); - _mediaTypeRepository = _repositoryFactory.CreateMediaTypeRepository(_unitOfWork); } internal ContentTypeService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, IContentService contentService, IMediaService mediaService, IUserService userService) { + _uowProvider = provider; _repositoryFactory = repositoryFactory; _contentService = contentService; _mediaService = mediaService; _userService = userService; - _unitOfWork = provider.GetUnitOfWork(); - _contentTypeRepository = _repositoryFactory.CreateContentTypeRepository(_unitOfWork); - _mediaTypeRepository = _repositoryFactory.CreateMediaTypeRepository(_unitOfWork); } /// @@ -60,8 +52,10 @@ namespace Umbraco.Core.Services /// public IContentType GetContentType(int id) { - var repository = _contentTypeRepository; - return repository.Get(id); + using (var repository = _repositoryFactory.CreateContentTypeRepository(_uowProvider.GetUnitOfWork())) + { + return repository.Get(id); + } } /// @@ -71,12 +65,13 @@ namespace Umbraco.Core.Services /// public IContentType GetContentType(string alias) { - var repository = _contentTypeRepository; + using (var repository = _repositoryFactory.CreateContentTypeRepository(_uowProvider.GetUnitOfWork())) + { + var query = Query.Builder.Where(x => x.Alias == alias); + var contentTypes = repository.GetByQuery(query); - var query = Query.Builder.Where(x => x.Alias == alias); - var contentTypes = repository.GetByQuery(query); - - return contentTypes.FirstOrDefault(); + return contentTypes.FirstOrDefault(); + } } /// @@ -86,8 +81,10 @@ namespace Umbraco.Core.Services /// An Enumerable list of objects public IEnumerable GetAllContentTypes(params int[] ids) { - var repository = _contentTypeRepository; - return repository.GetAll(ids); + using (var repository = _repositoryFactory.CreateContentTypeRepository(_uowProvider.GetUnitOfWork())) + { + return repository.GetAll(ids); + } } /// @@ -97,9 +94,12 @@ namespace Umbraco.Core.Services /// An Enumerable list of objects public IEnumerable GetContentTypeChildren(int id) { - var query = Query.Builder.Where(x => x.ParentId == id); - var contentTypes = _contentTypeRepository.GetByQuery(query); - return contentTypes; + using (var repository = _repositoryFactory.CreateContentTypeRepository(_uowProvider.GetUnitOfWork())) + { + var query = Query.Builder.Where(x => x.ParentId == id); + var contentTypes = repository.GetByQuery(query); + return contentTypes; + } } /// @@ -115,12 +115,17 @@ namespace Umbraco.Core.Services if (!e.Cancel) { - SetUser(contentType, userId); - _contentTypeRepository.AddOrUpdate(contentType); - _unitOfWork.Commit(); + var uow = _uowProvider.GetUnitOfWork(); + using (var repository = _repositoryFactory.CreateContentTypeRepository(uow)) + { + SetUser(contentType, userId); + repository.AddOrUpdate(contentType); - if (Saved != null) - Saved(contentType, e); + uow.Commit(); + + if (Saved != null) + Saved(contentType, e); + } Audit.Add(AuditTypes.Save, string.Format("Save ContentType performed by user"), userId == -1 ? 0 : userId, contentType.Id); } @@ -139,15 +144,20 @@ namespace Umbraco.Core.Services if (!e.Cancel) { - foreach (var contentType in contentTypes) + var uow = _uowProvider.GetUnitOfWork(); + using (var repository = _repositoryFactory.CreateContentTypeRepository(uow)) { - SetUser(contentType, userId); - _contentTypeRepository.AddOrUpdate(contentType); - } - _unitOfWork.Commit(); + foreach (var contentType in contentTypes) + { + SetUser(contentType, userId); + repository.AddOrUpdate(contentType); + } - if (Saved != null) - Saved(contentTypes, e); + uow.Commit(); + + if (Saved != null) + Saved(contentTypes, e); + } Audit.Add(AuditTypes.Save, string.Format("Save ContentTypes performed by user"), userId == -1 ? 0 : userId, -1); } @@ -170,15 +180,19 @@ namespace Umbraco.Core.Services if (!e.Cancel) { - foreach (var content in contentTypes) + var uow = _uowProvider.GetUnitOfWork(); + using (var repository = _repositoryFactory.CreateContentTypeRepository(uow)) { - content.Value.CreatorId = 0; - _contentTypeRepository.AddOrUpdate(content.Value); - _unitOfWork.Commit(); - } + foreach (var content in contentTypes) + { + content.Value.CreatorId = 0; + repository.AddOrUpdate(content.Value); + uow.Commit(); + } - if (Saved != null) - Saved(contentTypes, e); + if (Saved != null) + Saved(contentTypes, e); + } Audit.Add(AuditTypes.Save, string.Format("Save (lazy) ContentTypes performed by user"), userId == -1 ? 0 : userId, -1); } @@ -200,13 +214,15 @@ namespace Umbraco.Core.Services { _contentService.DeleteContentOfType(contentType.Id); - var repository = _contentTypeRepository; + var uow = _uowProvider.GetUnitOfWork(); + using (var repository = _repositoryFactory.CreateContentTypeRepository(uow)) + { + repository.Delete(contentType); + uow.Commit(); - repository.Delete(contentType); - _unitOfWork.Commit(); - - if (Deleted != null) - Deleted(contentType, e); + if (Deleted != null) + Deleted(contentType, e); + } Audit.Add(AuditTypes.Delete, string.Format("Delete ContentType performed by user"), userId == -1 ? 0 : userId, contentType.Id); } @@ -234,16 +250,19 @@ namespace Umbraco.Core.Services _contentService.DeleteContentOfType(contentType.Id); } - var repository = _contentTypeRepository; - - foreach (var contentType in contentTypeList) + var uow = _uowProvider.GetUnitOfWork(); + using (var repository = _repositoryFactory.CreateContentTypeRepository(uow)) { - repository.Delete(contentType); - } - _unitOfWork.Commit(); + foreach (var contentType in contentTypeList) + { + repository.Delete(contentType); + } - if (Deleted != null) - Deleted(contentTypes, e); + uow.Commit(); + + if (Deleted != null) + Deleted(contentTypes, e); + } Audit.Add(AuditTypes.Delete, string.Format("Delete ContentTypes performed by user"), userId == -1 ? 0 : userId, -1); } @@ -256,8 +275,10 @@ namespace Umbraco.Core.Services /// public IMediaType GetMediaType(int id) { - var repository = _mediaTypeRepository; - return repository.Get(id); + using (var repository = _repositoryFactory.CreateMediaTypeRepository(_uowProvider.GetUnitOfWork())) + { + return repository.Get(id); + } } /// @@ -267,12 +288,13 @@ namespace Umbraco.Core.Services /// public IMediaType GetMediaType(string alias) { - var repository = _mediaTypeRepository; + using (var repository = _repositoryFactory.CreateMediaTypeRepository(_uowProvider.GetUnitOfWork())) + { + var query = Query.Builder.Where(x => x.Alias == alias); + var contentTypes = repository.GetByQuery(query); - var query = Query.Builder.Where(x => x.Alias == alias); - var contentTypes = repository.GetByQuery(query); - - return contentTypes.FirstOrDefault(); + return contentTypes.FirstOrDefault(); + } } /// @@ -282,8 +304,10 @@ namespace Umbraco.Core.Services /// An Enumerable list of objects public IEnumerable GetAllMediaTypes(params int[] ids) { - var repository = _mediaTypeRepository; - return repository.GetAll(ids); + using (var repository = _repositoryFactory.CreateMediaTypeRepository(_uowProvider.GetUnitOfWork())) + { + return repository.GetAll(ids); + } } /// @@ -293,11 +317,12 @@ namespace Umbraco.Core.Services /// An Enumerable list of objects public IEnumerable GetMediaTypeChildren(int id) { - var repository = _mediaTypeRepository; - - var query = Query.Builder.Where(x => x.ParentId == id); - var contentTypes = repository.GetByQuery(query); - return contentTypes; + using (var repository = _repositoryFactory.CreateMediaTypeRepository(_uowProvider.GetUnitOfWork())) + { + var query = Query.Builder.Where(x => x.ParentId == id); + var contentTypes = repository.GetByQuery(query); + return contentTypes; + } } /// @@ -313,12 +338,17 @@ namespace Umbraco.Core.Services if (!e.Cancel) { - SetUser(mediaType, userId); - _mediaTypeRepository.AddOrUpdate(mediaType); - _unitOfWork.Commit(); + var uow = _uowProvider.GetUnitOfWork(); + using (var repository = _repositoryFactory.CreateMediaTypeRepository(uow)) + { + SetUser(mediaType, userId); + repository.AddOrUpdate(mediaType); + uow.Commit(); - if (Saved != null) - Saved(mediaType, e); + + if (Saved != null) + Saved(mediaType, e); + } Audit.Add(AuditTypes.Save, string.Format("Save MediaType performed by user"), userId == -1 ? 0 : userId, mediaType.Id); } @@ -337,15 +367,20 @@ namespace Umbraco.Core.Services if (!e.Cancel) { - foreach (var mediaType in mediaTypes) + var uow = _uowProvider.GetUnitOfWork(); + using (var repository = _repositoryFactory.CreateMediaTypeRepository(uow)) { - SetUser(mediaType, userId); - _mediaTypeRepository.AddOrUpdate(mediaType); - } - _unitOfWork.Commit(); - if (Saved != null) - Saved(mediaTypes, e); + foreach (var mediaType in mediaTypes) + { + SetUser(mediaType, userId); + repository.AddOrUpdate(mediaType); + } + uow.Commit(); + + if (Saved != null) + Saved(mediaTypes, e); + } Audit.Add(AuditTypes.Save, string.Format("Save MediaTypes performed by user"), userId == -1 ? 0 : userId, -1); } @@ -367,13 +402,16 @@ namespace Umbraco.Core.Services { _mediaService.DeleteMediaOfType(mediaType.Id); - var repository = _mediaTypeRepository; + var uow = _uowProvider.GetUnitOfWork(); + using (var repository = _repositoryFactory.CreateMediaTypeRepository(uow)) + { - repository.Delete(mediaType); - _unitOfWork.Commit(); + repository.Delete(mediaType); + uow.Commit(); - if (Deleted != null) - Deleted(mediaType, e); + if (Deleted != null) + Deleted(mediaType, e); + } Audit.Add(AuditTypes.Delete, string.Format("Delete MediaType performed by user"), userId == -1 ? 0 : userId, mediaType.Id); } @@ -399,16 +437,18 @@ namespace Umbraco.Core.Services _mediaService.DeleteMediaOfType(mediaType.Id); } - var repository = _mediaTypeRepository; - - foreach (var mediaType in mediaTypeList) + var uow = _uowProvider.GetUnitOfWork(); + using (var repository = _repositoryFactory.CreateMediaTypeRepository(uow)) { - repository.Delete(mediaType); - } - _unitOfWork.Commit(); + foreach (var mediaType in mediaTypeList) + { + repository.Delete(mediaType); + } + uow.Commit(); - if (Deleted != null) - Deleted(mediaTypes, e); + if (Deleted != null) + Deleted(mediaTypes, e); + } Audit.Add(AuditTypes.Delete, string.Format("Delete MediaTypes performed by user"), userId == -1 ? 0 : userId, -1); } diff --git a/src/Umbraco.Core/Services/ServiceContext.cs b/src/Umbraco.Core/Services/ServiceContext.cs index f8e20b1680..48745a5132 100644 --- a/src/Umbraco.Core/Services/ServiceContext.cs +++ b/src/Umbraco.Core/Services/ServiceContext.cs @@ -1,5 +1,3 @@ -using System; -using System.Collections.Concurrent; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.UnitOfWork; using Umbraco.Core.Publishing; @@ -49,7 +47,7 @@ namespace Umbraco.Core.Services _userService = new UserService(provider, repositoryFactory); if (_contentService == null) - _contentService = new ContentService(provider, publishingStrategy, repositoryFactory, _userService); + _contentService = new ContentService(provider, repositoryFactory, publishingStrategy, _userService); if(_mediaService == null) _mediaService = new MediaService(provider, repositoryFactory); diff --git a/src/Umbraco.Core/Services/ServiceFactory.cs b/src/Umbraco.Core/Services/ServiceFactory.cs deleted file mode 100644 index af8bf79bee..0000000000 --- a/src/Umbraco.Core/Services/ServiceFactory.cs +++ /dev/null @@ -1,73 +0,0 @@ -namespace Umbraco.Core.Services -{ - ///// - ///// Represents the ServiceFactory, which provides access to the various services in - ///// a non-singleton way. - ///// - //public static class ServiceFactory - //{ - // /// - // /// Gets the - // /// - // public static IContentService ContentService - // { - // get { return ServiceContext.Current.ContentService; } - // } - - // /// - // /// Gets the - // /// - // public static IContentTypeService ContentTypeService - // { - // get { return ServiceContext.Current.ContentTypeService; } - // } - - // /// - // /// Gets the - // /// - // public static IDataTypeService DataTypeService - // { - // get { return ServiceContext.Current.DataTypeService; } - // } - - // /// - // /// Gets the - // /// - // public static IFileService FileService - // { - // get { return ServiceContext.Current.FileService; } - // } - - // /// - // /// Gets the - // /// - // public static ILocalizationService LocalizationService - // { - // get { return ServiceContext.Current.LocalizationService; } - // } - - // /// - // /// Gets the - // /// - // public static IMediaService MediaService - // { - // get { return ServiceContext.Current.MediaService; } - // } - - // /// - // /// Gets the - // /// - // internal static IMacroService MacroService - // { - // get { return ServiceContext.Current.MacroService; } - // } - - // /// - // /// Gets the - // /// - // internal static IUserService UserService - // { - // get { return ServiceContext.Current.UserService; } - // } - //} -} \ No newline at end of file diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 1b70064885..7468263319 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -596,7 +596,6 @@ -