diff --git a/src/Umbraco.Core/CoreBootManager.cs b/src/Umbraco.Core/CoreBootManager.cs index 60aa21e726..dbaae0542b 100644 --- a/src/Umbraco.Core/CoreBootManager.cs +++ b/src/Umbraco.Core/CoreBootManager.cs @@ -7,6 +7,7 @@ using System.Web; using AutoMapper; using Umbraco.Core.Cache; using Umbraco.Core.Configuration; +using Umbraco.Core.Events; using Umbraco.Core.Exceptions; using Umbraco.Core.IO; using Umbraco.Core.Logging; @@ -164,7 +165,9 @@ namespace Umbraco.Core new FileUnitOfWorkProvider(), new PublishingStrategy(), ApplicationCache, - ProfilingLogger.Logger); + ProfilingLogger.Logger, + //default transient factory + new TransientMessagesFactory()); } /// diff --git a/src/Umbraco.Core/Events/CancellableEventArgs.cs b/src/Umbraco.Core/Events/CancellableEventArgs.cs index 80e69ae353..c4eeb85ade 100644 --- a/src/Umbraco.Core/Events/CancellableEventArgs.cs +++ b/src/Umbraco.Core/Events/CancellableEventArgs.cs @@ -3,7 +3,7 @@ using System.Security.Permissions; namespace Umbraco.Core.Events { - /// + /// /// Event args for that can support cancellation /// [HostProtection(SecurityAction.LinkDemand, SharedState = true)] @@ -11,15 +11,30 @@ namespace Umbraco.Core.Events { private bool _cancel; - public CancellableEventArgs(bool canCancel) + public CancellableEventArgs(bool canCancel, EventMessages eventMessages) + { + if (eventMessages == null) throw new ArgumentNullException("eventMessages"); + CanCancel = canCancel; + Messages = eventMessages; + } + + public CancellableEventArgs(bool canCancel) { CanCancel = canCancel; - } + //create a standalone messages + Messages = new EventMessages(); + } - public CancellableEventArgs() + public CancellableEventArgs(EventMessages eventMessages) + : this(true, eventMessages) + { + } + + public CancellableEventArgs() : this(true) { } + /// /// Flag to determine if this instance will support being cancellable /// @@ -32,7 +47,7 @@ namespace Umbraco.Core.Events { get { - if (!CanCancel) + if (CanCancel == false) { throw new InvalidOperationException("This event argument class does not support cancelling."); } @@ -40,12 +55,17 @@ namespace Umbraco.Core.Events } set { - if (!CanCancel) + if (CanCancel == false) { throw new InvalidOperationException("This event argument class does not support cancelling."); } _cancel = value; } } - } + + /// + /// Returns the EventMessages object which is used to add messages to the message collection for this event + /// + public EventMessages Messages { get; private set; } + } } \ No newline at end of file diff --git a/src/Umbraco.Core/Events/CancellableObjectEventArgs.cs b/src/Umbraco.Core/Events/CancellableObjectEventArgs.cs index a51da5652e..726d32d7b0 100644 --- a/src/Umbraco.Core/Events/CancellableObjectEventArgs.cs +++ b/src/Umbraco.Core/Events/CancellableObjectEventArgs.cs @@ -12,7 +12,18 @@ namespace Umbraco.Core.Events public class CancellableObjectEventArgs : CancellableEventArgs { - public CancellableObjectEventArgs(T eventObject, bool canCancel) + public CancellableObjectEventArgs(T eventObject, bool canCancel, EventMessages eventMessages) + : base(canCancel, eventMessages) + { + EventObject = eventObject; + } + + public CancellableObjectEventArgs(T eventObject, EventMessages eventMessages) + : this(eventObject, true, eventMessages) + { + } + + public CancellableObjectEventArgs(T eventObject, bool canCancel) : base(canCancel) { EventObject = eventObject; diff --git a/src/Umbraco.Core/Events/EventExtensions.cs b/src/Umbraco.Core/Events/EventExtensions.cs index 99cf145fe0..cfcaa921fb 100644 --- a/src/Umbraco.Core/Events/EventExtensions.cs +++ b/src/Umbraco.Core/Events/EventExtensions.cs @@ -7,16 +7,16 @@ namespace Umbraco.Core.Events /// public static class EventExtensions { - /// - /// Raises the event and returns a boolean value indicating if the event was cancelled - /// - /// - /// - /// - /// - /// - /// - public static bool IsRaisedEventCancelled( + /// + /// Raises the event and returns a boolean value indicating if the event was cancelled + /// + /// + /// + /// + /// + /// + /// + public static bool IsRaisedEventCancelled( this TypedEventHandler eventHandler, TArgs args, TSender sender) diff --git a/src/Umbraco.Core/Events/EventMessage.cs b/src/Umbraco.Core/Events/EventMessage.cs new file mode 100644 index 0000000000..98acc88cd9 --- /dev/null +++ b/src/Umbraco.Core/Events/EventMessage.cs @@ -0,0 +1,22 @@ +namespace Umbraco.Core.Events +{ + /// + /// An event message + /// + public sealed class EventMessage + { + /// + /// Initializes a new instance of the class. + /// + public EventMessage(string category, string message, EventMessageType messageType = EventMessageType.Default) + { + Category = category; + Message = message; + MessageType = messageType; + } + + public string Category { get; private set; } + public string Message { get; private set; } + public EventMessageType MessageType { get; private set; } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Events/EventMessages.cs b/src/Umbraco.Core/Events/EventMessages.cs new file mode 100644 index 0000000000..adea701d4a --- /dev/null +++ b/src/Umbraco.Core/Events/EventMessages.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; + +namespace Umbraco.Core.Events +{ + /// + /// Default transient event messages collection + /// + public sealed class EventMessages + { + private readonly List _msgs = new List(); + + public void Add(EventMessage msg) + { + _msgs.Add(msg); + } + + public IEnumerable GetAll() + { + return _msgs; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Events/IEventMessagesFactory.cs b/src/Umbraco.Core/Events/IEventMessagesFactory.cs new file mode 100644 index 0000000000..e85b853ee1 --- /dev/null +++ b/src/Umbraco.Core/Events/IEventMessagesFactory.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; + +namespace Umbraco.Core.Events +{ + public interface IEventMessagesFactory + { + EventMessages CreateMessages(); + } + + /// + /// A simple/default transient messages factory + /// + internal class TransientMessagesFactory : IEventMessagesFactory + { + public EventMessages CreateMessages() + { + return new EventMessages(); + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Events/MessageType.cs b/src/Umbraco.Core/Events/MessageType.cs new file mode 100644 index 0000000000..6299a0e7d7 --- /dev/null +++ b/src/Umbraco.Core/Events/MessageType.cs @@ -0,0 +1,14 @@ +namespace Umbraco.Core.Events +{ + /// + /// The type of event message + /// + public enum EventMessageType + { + Default = 0, + Info = 1, + Error = 2, + Success = 3, + Warning = 4 + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Events/MoveEventArgs.cs b/src/Umbraco.Core/Events/MoveEventArgs.cs index 107629ff19..c551dc626e 100644 --- a/src/Umbraco.Core/Events/MoveEventArgs.cs +++ b/src/Umbraco.Core/Events/MoveEventArgs.cs @@ -4,20 +4,6 @@ using System.Linq; namespace Umbraco.Core.Events { - public class MoveEventInfo - { - public MoveEventInfo(TEntity entity, string originalPath, int newParentId) - { - Entity = entity; - OriginalPath = originalPath; - NewParentId = newParentId; - } - - public TEntity Entity { get; set; } - public string OriginalPath { get; set; } - public int NewParentId { get; set; } - } - public class MoveEventArgs : CancellableObjectEventArgs { /// diff --git a/src/Umbraco.Core/Events/MoveEventInfo.cs b/src/Umbraco.Core/Events/MoveEventInfo.cs new file mode 100644 index 0000000000..a74db7f36e --- /dev/null +++ b/src/Umbraco.Core/Events/MoveEventInfo.cs @@ -0,0 +1,16 @@ +namespace Umbraco.Core.Events +{ + public class MoveEventInfo + { + public MoveEventInfo(TEntity entity, string originalPath, int newParentId) + { + Entity = entity; + OriginalPath = originalPath; + NewParentId = newParentId; + } + + public TEntity Entity { get; set; } + public string OriginalPath { get; set; } + public int NewParentId { get; set; } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Events/NewEventArgs.cs b/src/Umbraco.Core/Events/NewEventArgs.cs index 8e6cd64db1..acfd64e60d 100644 --- a/src/Umbraco.Core/Events/NewEventArgs.cs +++ b/src/Umbraco.Core/Events/NewEventArgs.cs @@ -4,7 +4,39 @@ namespace Umbraco.Core.Events { public class NewEventArgs : CancellableObjectEventArgs { - public NewEventArgs(TEntity eventObject, bool canCancel, string @alias, int parentId) : base(eventObject, canCancel) + + + public NewEventArgs(TEntity eventObject, bool canCancel, string @alias, int parentId, EventMessages eventMessages) + : base(eventObject, canCancel, eventMessages) + { + Alias = alias; + ParentId = parentId; + } + + public NewEventArgs(TEntity eventObject, bool canCancel, string @alias, TEntity parent, EventMessages eventMessages) + : base(eventObject, canCancel, eventMessages) + { + Alias = alias; + Parent = parent; + } + + public NewEventArgs(TEntity eventObject, string @alias, int parentId, EventMessages eventMessages) + : base(eventObject, eventMessages) + { + Alias = alias; + ParentId = parentId; + } + + public NewEventArgs(TEntity eventObject, string @alias, TEntity parent, EventMessages eventMessages) + : base(eventObject, eventMessages) + { + Alias = alias; + Parent = parent; + } + + + + public NewEventArgs(TEntity eventObject, bool canCancel, string @alias, int parentId) : base(eventObject, canCancel) { Alias = alias; ParentId = parentId; diff --git a/src/Umbraco.Core/Services/AuditService.cs b/src/Umbraco.Core/Services/AuditService.cs index 032516421c..3e076084f2 100644 --- a/src/Umbraco.Core/Services/AuditService.cs +++ b/src/Umbraco.Core/Services/AuditService.cs @@ -1,4 +1,5 @@ using System; +using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Persistence; @@ -8,8 +9,8 @@ namespace Umbraco.Core.Services { public sealed class AuditService : RepositoryService, IAuditService { - public AuditService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger) - : base(provider, repositoryFactory, logger) + public AuditService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { } diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs index b7ad8c4d03..0c861ac1ef 100644 --- a/src/Umbraco.Core/Services/ContentService.cs +++ b/src/Umbraco.Core/Services/ContentService.cs @@ -38,37 +38,15 @@ namespace Umbraco.Core.Services //for example, the Move method needs to be locked but this calls the Save method which also needs to be locked. private static readonly ReaderWriterLockSlim Locker = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); - [Obsolete("Use the constructors that specify all dependencies instead")] - public ContentService() - : this(new RepositoryFactory(ApplicationContext.Current.ApplicationCache, LoggerResolver.Current.Logger, SqlSyntaxContext.SqlSyntaxProvider, UmbracoConfig.For.UmbracoSettings())) - { } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public ContentService(RepositoryFactory repositoryFactory) - : this(new PetaPocoUnitOfWorkProvider(LoggerResolver.Current.Logger), repositoryFactory, new PublishingStrategy()) - { } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public ContentService(IDatabaseUnitOfWorkProvider provider) - : this(provider, new RepositoryFactory(ApplicationContext.Current.ApplicationCache, LoggerResolver.Current.Logger, SqlSyntaxContext.SqlSyntaxProvider, UmbracoConfig.For.UmbracoSettings()), new PublishingStrategy()) - { } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public ContentService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory) - : this(provider, repositoryFactory, new PublishingStrategy()) - { } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public ContentService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, IPublishingStrategy publishingStrategy) - : base(provider, repositoryFactory, LoggerResolver.Current.Logger) - { - if (publishingStrategy == null) throw new ArgumentNullException("publishingStrategy"); - _dataTypeService = new DataTypeService(UowProvider, RepositoryFactory); - _userService = new UserService(UowProvider, RepositoryFactory); - } - - public ContentService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IPublishingStrategy publishingStrategy, IDataTypeService dataTypeService, IUserService userService) - : base(provider, repositoryFactory, logger) + public ContentService( + IDatabaseUnitOfWorkProvider provider, + RepositoryFactory repositoryFactory, + ILogger logger, + IEventMessagesFactory eventMessagesFactory, + IPublishingStrategy publishingStrategy, + IDataTypeService dataTypeService, + IUserService userService) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { if (publishingStrategy == null) throw new ArgumentNullException("publishingStrategy"); if (dataTypeService == null) throw new ArgumentNullException("dataTypeService"); diff --git a/src/Umbraco.Core/Services/ContentTypeService.cs b/src/Umbraco.Core/Services/ContentTypeService.cs index 194871f252..f144fa51e4 100644 --- a/src/Umbraco.Core/Services/ContentTypeService.cs +++ b/src/Umbraco.Core/Services/ContentTypeService.cs @@ -32,28 +32,8 @@ namespace Umbraco.Core.Services //for example, the Move method needs to be locked but this calls the Save method which also needs to be locked. private static readonly ReaderWriterLockSlim Locker = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); - [Obsolete("Use the constructors that specify all dependencies instead")] - public ContentTypeService(IContentService contentService, IMediaService mediaService) - : this(new PetaPocoUnitOfWorkProvider(LoggerResolver.Current.Logger), new RepositoryFactory(), contentService, mediaService) - {} - - [Obsolete("Use the constructors that specify all dependencies instead")] - public ContentTypeService( RepositoryFactory repositoryFactory, IContentService contentService, IMediaService mediaService) - : this(new PetaPocoUnitOfWorkProvider(), repositoryFactory, contentService, mediaService) - { } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public ContentTypeService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, IContentService contentService, IMediaService mediaService) - : base(provider, repositoryFactory, LoggerResolver.Current.Logger) - { - if (contentService == null) throw new ArgumentNullException("contentService"); - if (mediaService == null) throw new ArgumentNullException("mediaService"); - _contentService = contentService; - _mediaService = mediaService; - } - - public ContentTypeService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IContentService contentService, IMediaService mediaService) - : base(provider, repositoryFactory, logger) + public ContentTypeService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory, IContentService contentService, IMediaService mediaService) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { if (contentService == null) throw new ArgumentNullException("contentService"); if (mediaService == null) throw new ArgumentNullException("mediaService"); diff --git a/src/Umbraco.Core/Services/ContentTypeServiceBase.cs b/src/Umbraco.Core/Services/ContentTypeServiceBase.cs index d5ebaabdb6..c071c7bbba 100644 --- a/src/Umbraco.Core/Services/ContentTypeServiceBase.cs +++ b/src/Umbraco.Core/Services/ContentTypeServiceBase.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.EntityBase; @@ -10,8 +11,8 @@ namespace Umbraco.Core.Services { public class ContentTypeServiceBase : RepositoryService { - public ContentTypeServiceBase(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger) - : base(provider, repositoryFactory, logger) + public ContentTypeServiceBase(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { } diff --git a/src/Umbraco.Core/Services/DataTypeService.cs b/src/Umbraco.Core/Services/DataTypeService.cs index a30945e5c2..f6dd53020c 100644 --- a/src/Umbraco.Core/Services/DataTypeService.cs +++ b/src/Umbraco.Core/Services/DataTypeService.cs @@ -21,31 +21,8 @@ namespace Umbraco.Core.Services public class DataTypeService : RepositoryService, IDataTypeService { - [Obsolete("Use the constructors that specify all dependencies instead")] - public DataTypeService() - : this(new RepositoryFactory()) - {} - - [Obsolete("Use the constructors that specify all dependencies instead")] - public DataTypeService(RepositoryFactory repositoryFactory) - : this(new PetaPocoUnitOfWorkProvider(), repositoryFactory) - { - } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public DataTypeService(IDatabaseUnitOfWorkProvider provider) - : this(provider, new RepositoryFactory()) - { - } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public DataTypeService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory) - : this(provider, repositoryFactory, LoggerResolver.Current.Logger) - { - } - - public DataTypeService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger) - : base(provider, repositoryFactory, logger) + public DataTypeService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { } diff --git a/src/Umbraco.Core/Services/DomainService.cs b/src/Umbraco.Core/Services/DomainService.cs index 71429cfb59..2fdf3edb93 100644 --- a/src/Umbraco.Core/Services/DomainService.cs +++ b/src/Umbraco.Core/Services/DomainService.cs @@ -12,8 +12,8 @@ namespace Umbraco.Core.Services { public class DomainService : RepositoryService, IDomainService { - public DomainService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger) - : base(provider, repositoryFactory, logger) + public DomainService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { } diff --git a/src/Umbraco.Core/Services/EntityService.cs b/src/Umbraco.Core/Services/EntityService.cs index 695d092bd4..78fe48ec76 100644 --- a/src/Umbraco.Core/Services/EntityService.cs +++ b/src/Umbraco.Core/Services/EntityService.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using Umbraco.Core.Cache; using Umbraco.Core.CodeAnnotations; +using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.EntityBase; @@ -18,10 +19,10 @@ namespace Umbraco.Core.Services private readonly Dictionary>> _supportedObjectTypes; - public EntityService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, + public EntityService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory, IContentService contentService, IContentTypeService contentTypeService, IMediaService mediaService, IDataTypeService dataTypeService, IMemberService memberService, IMemberTypeService memberTypeService, IRuntimeCacheProvider runtimeCache) - : base(provider, repositoryFactory, logger) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { _runtimeCache = runtimeCache; IContentTypeService contentTypeService1 = contentTypeService; diff --git a/src/Umbraco.Core/Services/ExternalLoginService.cs b/src/Umbraco.Core/Services/ExternalLoginService.cs index f33f1c492b..91ca77872d 100644 --- a/src/Umbraco.Core/Services/ExternalLoginService.cs +++ b/src/Umbraco.Core/Services/ExternalLoginService.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using Microsoft.AspNet.Identity; +using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models.Identity; using Umbraco.Core.Persistence; @@ -11,8 +12,8 @@ namespace Umbraco.Core.Services { public class ExternalLoginService : RepositoryService, IExternalLoginService { - public ExternalLoginService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger) - : base(provider, repositoryFactory, logger) + public ExternalLoginService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { } diff --git a/src/Umbraco.Core/Services/LocalizationService.cs b/src/Umbraco.Core/Services/LocalizationService.cs index 05966df1f0..6d6cf0c101 100644 --- a/src/Umbraco.Core/Services/LocalizationService.cs +++ b/src/Umbraco.Core/Services/LocalizationService.cs @@ -18,26 +18,10 @@ namespace Umbraco.Core.Services /// public class LocalizationService : RepositoryService, ILocalizationService { + - [Obsolete("Use the constructors that specify all dependencies instead")] - public LocalizationService() - : this(new RepositoryFactory(ApplicationContext.Current.ApplicationCache, LoggerResolver.Current.Logger, SqlSyntaxContext.SqlSyntaxProvider, UmbracoConfig.For.UmbracoSettings())) - { } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public LocalizationService(RepositoryFactory repositoryFactory) - : this(new PetaPocoUnitOfWorkProvider(LoggerResolver.Current.Logger), repositoryFactory, LoggerResolver.Current.Logger) - { - } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public LocalizationService(IDatabaseUnitOfWorkProvider provider) - : this(provider, new RepositoryFactory(ApplicationContext.Current.ApplicationCache, LoggerResolver.Current.Logger, SqlSyntaxContext.SqlSyntaxProvider, UmbracoConfig.For.UmbracoSettings()), LoggerResolver.Current.Logger) - { - } - - public LocalizationService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger) - : base(provider, repositoryFactory, logger) + public LocalizationService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { } diff --git a/src/Umbraco.Core/Services/MacroService.cs b/src/Umbraco.Core/Services/MacroService.cs index bfa201e718..49853eab81 100644 --- a/src/Umbraco.Core/Services/MacroService.cs +++ b/src/Umbraco.Core/Services/MacroService.cs @@ -20,26 +20,8 @@ namespace Umbraco.Core.Services public class MacroService : RepositoryService, IMacroService { - [Obsolete("Use the constructors that specify all dependencies instead")] - public MacroService() - : this(new PetaPocoUnitOfWorkProvider(), new RepositoryFactory()) - { - } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public MacroService(IDatabaseUnitOfWorkProvider provider) - : this(provider, new RepositoryFactory()) - { - } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public MacroService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory) - : this(provider, repositoryFactory, LoggerResolver.Current.Logger) - { - } - - public MacroService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger) - : base(provider, repositoryFactory, logger) + public MacroService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { } diff --git a/src/Umbraco.Core/Services/MediaService.cs b/src/Umbraco.Core/Services/MediaService.cs index 299d089319..f73c1ce0f8 100644 --- a/src/Umbraco.Core/Services/MediaService.cs +++ b/src/Umbraco.Core/Services/MediaService.cs @@ -35,29 +35,9 @@ namespace Umbraco.Core.Services private readonly EntityXmlSerializer _entitySerializer = new EntityXmlSerializer(); private readonly IDataTypeService _dataTypeService; private readonly IUserService _userService; - - [Obsolete("Use the constructors that specify all dependencies instead")] - public MediaService(RepositoryFactory repositoryFactory) - : this(new PetaPocoUnitOfWorkProvider(), repositoryFactory) - { - } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public MediaService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory) - : base(provider, repositoryFactory, LoggerResolver.Current.Logger) - { - _dataTypeService = new DataTypeService(provider, repositoryFactory); - _userService = new UserService(provider, repositoryFactory); - } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public MediaService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, IDataTypeService dataTypeService, IUserService userService) - : this(provider, repositoryFactory, LoggerResolver.Current.Logger, dataTypeService, userService) - { - } - - public MediaService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IDataTypeService dataTypeService, IUserService userService) - : base(provider, repositoryFactory, logger) + + public MediaService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory, IDataTypeService dataTypeService, IUserService userService) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { if (dataTypeService == null) throw new ArgumentNullException("dataTypeService"); if (userService == null) throw new ArgumentNullException("userService"); diff --git a/src/Umbraco.Core/Services/MemberGroupService.cs b/src/Umbraco.Core/Services/MemberGroupService.cs index 0f75bec93e..47b62917fc 100644 --- a/src/Umbraco.Core/Services/MemberGroupService.cs +++ b/src/Umbraco.Core/Services/MemberGroupService.cs @@ -14,26 +14,8 @@ namespace Umbraco.Core.Services public class MemberGroupService : RepositoryService, IMemberGroupService { - [Obsolete("Use the constructors that specify all dependencies instead")] - public MemberGroupService(RepositoryFactory repositoryFactory) - : this(new PetaPocoUnitOfWorkProvider(), repositoryFactory) - { - } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public MemberGroupService(IDatabaseUnitOfWorkProvider provider) - : this(provider, new RepositoryFactory()) - { - } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public MemberGroupService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory) - : this(provider, repositoryFactory, LoggerResolver.Current.Logger) - { - } - - public MemberGroupService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger) - : base(provider, repositoryFactory, logger) + public MemberGroupService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { //Proxy events! MemberGroupRepository.SavedMemberGroup += MemberGroupRepository_SavedMemberGroup; diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index c6c49da7e9..fdfe401ca9 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -30,37 +30,9 @@ namespace Umbraco.Core.Services private readonly EntityXmlSerializer _entitySerializer = new EntityXmlSerializer(); private readonly IDataTypeService _dataTypeService; private static readonly ReaderWriterLockSlim Locker = new ReaderWriterLockSlim(); - - [Obsolete("Use the constructors that specify all dependencies instead")] - public MemberService(RepositoryFactory repositoryFactory, IMemberGroupService memberGroupService) - : this(new PetaPocoUnitOfWorkProvider(), repositoryFactory, memberGroupService) - { - } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public MemberService(IDatabaseUnitOfWorkProvider provider, IMemberGroupService memberGroupService) - : this(provider, new RepositoryFactory(), memberGroupService) - { - } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public MemberService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, IMemberGroupService memberGroupService) - : base(provider, repositoryFactory, LoggerResolver.Current.Logger) - { - if (memberGroupService == null) throw new ArgumentNullException("memberGroupService"); - _memberGroupService = memberGroupService; - _dataTypeService = new DataTypeService(provider, repositoryFactory); - } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public MemberService(IDatabaseUnitOfWorkProvider provider, IMemberGroupService memberGroupService, IDataTypeService dataTypeService) - : this(provider, new RepositoryFactory(), LoggerResolver.Current.Logger, memberGroupService, dataTypeService) - { - - } - - public MemberService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IMemberGroupService memberGroupService, IDataTypeService dataTypeService) - : base(provider, repositoryFactory, logger) + + public MemberService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory, IMemberGroupService memberGroupService, IDataTypeService dataTypeService) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { if (memberGroupService == null) throw new ArgumentNullException("memberGroupService"); if (dataTypeService == null) throw new ArgumentNullException("dataTypeService"); diff --git a/src/Umbraco.Core/Services/MemberTypeService.cs b/src/Umbraco.Core/Services/MemberTypeService.cs index 51cbf50a8a..73061be4d0 100644 --- a/src/Umbraco.Core/Services/MemberTypeService.cs +++ b/src/Umbraco.Core/Services/MemberTypeService.cs @@ -17,25 +17,10 @@ namespace Umbraco.Core.Services private readonly IMemberService _memberService; private static readonly ReaderWriterLockSlim Locker = new ReaderWriterLockSlim(); + - [Obsolete("Use the constructors that specify all dependencies instead")] - public MemberTypeService(IMemberService memberService) - : this(new PetaPocoUnitOfWorkProvider(), new RepositoryFactory(), memberService) - {} - - [Obsolete("Use the constructors that specify all dependencies instead")] - public MemberTypeService(RepositoryFactory repositoryFactory, IMemberService memberService) - : this(new PetaPocoUnitOfWorkProvider(), repositoryFactory, memberService) - { } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public MemberTypeService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, IMemberService memberService) - : this(provider, repositoryFactory, LoggerResolver.Current.Logger, memberService) - { - } - - public MemberTypeService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IMemberService memberService) - : base(provider, repositoryFactory, logger) + public MemberTypeService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory, IMemberService memberService) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { if (memberService == null) throw new ArgumentNullException("memberService"); _memberService = memberService; diff --git a/src/Umbraco.Core/Services/MigrationEntryService.cs b/src/Umbraco.Core/Services/MigrationEntryService.cs index 6d441b5271..2bd463c6d0 100644 --- a/src/Umbraco.Core/Services/MigrationEntryService.cs +++ b/src/Umbraco.Core/Services/MigrationEntryService.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using Semver; +using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Persistence; @@ -15,8 +16,8 @@ namespace Umbraco.Core.Services /// public sealed class MigrationEntryService : RepositoryService, IMigrationEntryService { - public MigrationEntryService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger) - : base(provider, repositoryFactory, logger) + public MigrationEntryService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { } diff --git a/src/Umbraco.Core/Services/PublicAccessService.cs b/src/Umbraco.Core/Services/PublicAccessService.cs index b8e95a33a9..6ca6660895 100644 --- a/src/Umbraco.Core/Services/PublicAccessService.cs +++ b/src/Umbraco.Core/Services/PublicAccessService.cs @@ -12,8 +12,8 @@ namespace Umbraco.Core.Services { public class PublicAccessService : RepositoryService, IPublicAccessService { - public PublicAccessService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger) - : base(provider, repositoryFactory, logger) + public PublicAccessService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { } diff --git a/src/Umbraco.Core/Services/RelationService.cs b/src/Umbraco.Core/Services/RelationService.cs index db2328047d..b4a37fc1d1 100644 --- a/src/Umbraco.Core/Services/RelationService.cs +++ b/src/Umbraco.Core/Services/RelationService.cs @@ -14,15 +14,9 @@ namespace Umbraco.Core.Services public class RelationService : RepositoryService, IRelationService { private readonly IEntityService _entityService; - - [Obsolete("Use the constructors that specify all dependencies instead")] - public RelationService(IDatabaseUnitOfWorkProvider uowProvider, RepositoryFactory repositoryFactory, IEntityService entityService) - : this(uowProvider, repositoryFactory, LoggerResolver.Current.Logger, entityService) - { - } - - public RelationService(IDatabaseUnitOfWorkProvider uowProvider, RepositoryFactory repositoryFactory, ILogger logger, IEntityService entityService) - : base(uowProvider, repositoryFactory, logger) + + public RelationService(IDatabaseUnitOfWorkProvider uowProvider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory, IEntityService entityService) + : base(uowProvider, repositoryFactory, logger, eventMessagesFactory) { if (entityService == null) throw new ArgumentNullException("entityService"); _entityService = entityService; diff --git a/src/Umbraco.Core/Services/RepositoryService.cs b/src/Umbraco.Core/Services/RepositoryService.cs index e1c70ab580..88807f0291 100644 --- a/src/Umbraco.Core/Services/RepositoryService.cs +++ b/src/Umbraco.Core/Services/RepositoryService.cs @@ -1,4 +1,5 @@ using System; +using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.UnitOfWork; @@ -11,15 +12,18 @@ namespace Umbraco.Core.Services public abstract class RepositoryService : IService { protected ILogger Logger { get; private set; } + protected IEventMessagesFactory EventMessagesFactory { get; private set; } protected RepositoryFactory RepositoryFactory { get; private set; } protected IDatabaseUnitOfWorkProvider UowProvider { get; private set; } - protected RepositoryService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger) + protected RepositoryService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory) { if (provider == null) throw new ArgumentNullException("provider"); if (repositoryFactory == null) throw new ArgumentNullException("repositoryFactory"); if (logger == null) throw new ArgumentNullException("logger"); + if (eventMessagesFactory == null) throw new ArgumentNullException("eventMessagesFactory"); Logger = logger; + EventMessagesFactory = eventMessagesFactory; RepositoryFactory = repositoryFactory; UowProvider = provider; } diff --git a/src/Umbraco.Core/Services/ServerRegistrationService.cs b/src/Umbraco.Core/Services/ServerRegistrationService.cs index 2812a9d1b8..fac56499fd 100644 --- a/src/Umbraco.Core/Services/ServerRegistrationService.cs +++ b/src/Umbraco.Core/Services/ServerRegistrationService.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Persistence; @@ -20,8 +21,9 @@ namespace Umbraco.Core.Services /// A UnitOfWork provider. /// A repository factory. /// A logger. - public ServerRegistrationService(IDatabaseUnitOfWorkProvider uowProvider, RepositoryFactory repositoryFactory, ILogger logger) - : base(uowProvider, repositoryFactory, logger) + /// + public ServerRegistrationService(IDatabaseUnitOfWorkProvider uowProvider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory) + : base(uowProvider, repositoryFactory, logger, eventMessagesFactory) { } /// diff --git a/src/Umbraco.Core/Services/ServiceContext.cs b/src/Umbraco.Core/Services/ServiceContext.cs index 2ad172bf0f..cd8132b951 100644 --- a/src/Umbraco.Core/Services/ServiceContext.cs +++ b/src/Umbraco.Core/Services/ServiceContext.cs @@ -8,6 +8,7 @@ using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.UnitOfWork; using Umbraco.Core.Publishing; using umbraco.interfaces; +using Umbraco.Core.Events; namespace Umbraco.Core.Services { @@ -136,17 +137,27 @@ namespace Umbraco.Core.Services /// /// /// + /// public ServiceContext( RepositoryFactory repositoryFactory, IDatabaseUnitOfWorkProvider dbUnitOfWorkProvider, IUnitOfWorkProvider fileUnitOfWorkProvider, BasePublishingStrategy publishingStrategy, CacheHelper cache, - ILogger logger) + ILogger logger, + IEventMessagesFactory eventMessagesFactory) { + if (repositoryFactory == null) throw new ArgumentNullException("repositoryFactory"); + if (dbUnitOfWorkProvider == null) throw new ArgumentNullException("dbUnitOfWorkProvider"); + if (fileUnitOfWorkProvider == null) throw new ArgumentNullException("fileUnitOfWorkProvider"); + if (publishingStrategy == null) throw new ArgumentNullException("publishingStrategy"); + if (cache == null) throw new ArgumentNullException("cache"); + if (logger == null) throw new ArgumentNullException("logger"); + if (eventMessagesFactory == null) throw new ArgumentNullException(nameof(eventMessagesFactory)); + BuildServiceCache(dbUnitOfWorkProvider, fileUnitOfWorkProvider, publishingStrategy, cache, repositoryFactory, - logger); + logger, eventMessagesFactory); } /// @@ -158,28 +169,29 @@ namespace Umbraco.Core.Services BasePublishingStrategy publishingStrategy, CacheHelper cache, RepositoryFactory repositoryFactory, - ILogger logger) + ILogger logger, + IEventMessagesFactory eventMessagesFactory) { var provider = dbUnitOfWorkProvider; var fileProvider = fileUnitOfWorkProvider; if (_migrationEntryService == null) - _migrationEntryService = new Lazy(() => new MigrationEntryService(provider, repositoryFactory, logger)); + _migrationEntryService = new Lazy(() => new MigrationEntryService(provider, repositoryFactory, logger, eventMessagesFactory)); if (_externalLoginService == null) - _externalLoginService = new Lazy(() => new ExternalLoginService(provider, repositoryFactory, logger)); + _externalLoginService = new Lazy(() => new ExternalLoginService(provider, repositoryFactory, logger, eventMessagesFactory)); if (_publicAccessService == null) - _publicAccessService = new Lazy(() => new PublicAccessService(provider, repositoryFactory, logger)); + _publicAccessService = new Lazy(() => new PublicAccessService(provider, repositoryFactory, logger, eventMessagesFactory)); if (_taskService == null) - _taskService = new Lazy(() => new TaskService(provider, repositoryFactory, logger)); + _taskService = new Lazy(() => new TaskService(provider, repositoryFactory, logger, eventMessagesFactory)); if (_domainService == null) - _domainService = new Lazy(() => new DomainService(provider, repositoryFactory, logger)); + _domainService = new Lazy(() => new DomainService(provider, repositoryFactory, logger, eventMessagesFactory)); if (_auditService == null) - _auditService = new Lazy(() => new AuditService(provider, repositoryFactory, logger)); + _auditService = new Lazy(() => new AuditService(provider, repositoryFactory, logger, eventMessagesFactory)); if (_localizedTextService == null) { @@ -222,43 +234,43 @@ namespace Umbraco.Core.Services _notificationService = new Lazy(() => new NotificationService(provider, _userService.Value, _contentService.Value, logger)); if (_serverRegistrationService == null) - _serverRegistrationService = new Lazy(() => new ServerRegistrationService(provider, repositoryFactory, logger)); + _serverRegistrationService = new Lazy(() => new ServerRegistrationService(provider, repositoryFactory, logger, eventMessagesFactory)); if (_userService == null) - _userService = new Lazy(() => new UserService(provider, repositoryFactory, logger)); + _userService = new Lazy(() => new UserService(provider, repositoryFactory, logger, eventMessagesFactory)); if (_memberService == null) - _memberService = new Lazy(() => new MemberService(provider, repositoryFactory, logger, _memberGroupService.Value, _dataTypeService.Value)); + _memberService = new Lazy(() => new MemberService(provider, repositoryFactory, logger, eventMessagesFactory, _memberGroupService.Value, _dataTypeService.Value)); if (_contentService == null) - _contentService = new Lazy(() => new ContentService(provider, repositoryFactory, logger, publishingStrategy, _dataTypeService.Value, _userService.Value)); + _contentService = new Lazy(() => new ContentService(provider, repositoryFactory, logger, eventMessagesFactory, publishingStrategy, _dataTypeService.Value, _userService.Value)); if (_mediaService == null) - _mediaService = new Lazy(() => new MediaService(provider, repositoryFactory, logger, _dataTypeService.Value, _userService.Value)); + _mediaService = new Lazy(() => new MediaService(provider, repositoryFactory, logger, eventMessagesFactory, _dataTypeService.Value, _userService.Value)); if (_contentTypeService == null) - _contentTypeService = new Lazy(() => new ContentTypeService(provider, repositoryFactory, logger, _contentService.Value, _mediaService.Value)); + _contentTypeService = new Lazy(() => new ContentTypeService(provider, repositoryFactory, logger, eventMessagesFactory, _contentService.Value, _mediaService.Value)); if (_dataTypeService == null) - _dataTypeService = new Lazy(() => new DataTypeService(provider, repositoryFactory, logger)); + _dataTypeService = new Lazy(() => new DataTypeService(provider, repositoryFactory, logger, eventMessagesFactory)); if (_fileService == null) _fileService = new Lazy(() => new FileService(fileProvider, provider, repositoryFactory)); if (_localizationService == null) - _localizationService = new Lazy(() => new LocalizationService(provider, repositoryFactory, logger)); + _localizationService = new Lazy(() => new LocalizationService(provider, repositoryFactory, logger, eventMessagesFactory)); if (_packagingService == null) _packagingService = new Lazy(() => new PackagingService(logger, _contentService.Value, _contentTypeService.Value, _mediaService.Value, _macroService.Value, _dataTypeService.Value, _fileService.Value, _localizationService.Value, _userService.Value, repositoryFactory, provider)); if (_entityService == null) _entityService = new Lazy(() => new EntityService( - provider, repositoryFactory, logger, + provider, repositoryFactory, logger, eventMessagesFactory, _contentService.Value, _contentTypeService.Value, _mediaService.Value, _dataTypeService.Value, _memberService.Value, _memberTypeService.Value, cache.RuntimeCache)); if (_relationService == null) - _relationService = new Lazy(() => new RelationService(provider, repositoryFactory, logger, _entityService.Value)); + _relationService = new Lazy(() => new RelationService(provider, repositoryFactory, logger, eventMessagesFactory, _entityService.Value)); if (_treeService == null) _treeService = new Lazy(() => new ApplicationTreeService(logger, cache)); @@ -267,16 +279,16 @@ namespace Umbraco.Core.Services _sectionService = new Lazy(() => new SectionService(_userService.Value, _treeService.Value, provider, cache)); if (_macroService == null) - _macroService = new Lazy(() => new MacroService(provider, repositoryFactory, logger)); + _macroService = new Lazy(() => new MacroService(provider, repositoryFactory, logger, eventMessagesFactory)); if (_memberTypeService == null) - _memberTypeService = new Lazy(() => new MemberTypeService(provider, repositoryFactory, logger, _memberService.Value)); + _memberTypeService = new Lazy(() => new MemberTypeService(provider, repositoryFactory, logger, eventMessagesFactory, _memberService.Value)); if (_tagService == null) - _tagService = new Lazy(() => new TagService(provider, repositoryFactory, logger)); + _tagService = new Lazy(() => new TagService(provider, repositoryFactory, logger, eventMessagesFactory)); if (_memberGroupService == null) - _memberGroupService = new Lazy(() => new MemberGroupService(provider, repositoryFactory, logger)); + _memberGroupService = new Lazy(() => new MemberGroupService(provider, repositoryFactory, logger, eventMessagesFactory)); } diff --git a/src/Umbraco.Core/Services/TagService.cs b/src/Umbraco.Core/Services/TagService.cs index 8f4bb80c89..d3b502e14b 100644 --- a/src/Umbraco.Core/Services/TagService.cs +++ b/src/Umbraco.Core/Services/TagService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Persistence; @@ -16,32 +17,9 @@ namespace Umbraco.Core.Services /// public class TagService : RepositoryService, ITagService { - - [Obsolete("Use the constructors that specify all dependencies instead")] - public TagService() - : this(new RepositoryFactory()) - {} - - [Obsolete("Use the constructors that specify all dependencies instead")] - public TagService(RepositoryFactory repositoryFactory) - : this(new PetaPocoUnitOfWorkProvider(), repositoryFactory) - { - } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public TagService(IDatabaseUnitOfWorkProvider provider) - : this(provider, new RepositoryFactory()) - { - } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public TagService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory) - : this(provider, repositoryFactory, LoggerResolver.Current.Logger) - { - } - - public TagService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger) - : base(provider, repositoryFactory, logger) + + public TagService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { } diff --git a/src/Umbraco.Core/Services/TaskService.cs b/src/Umbraco.Core/Services/TaskService.cs index 3f51b92185..9845c5ebb9 100644 --- a/src/Umbraco.Core/Services/TaskService.cs +++ b/src/Umbraco.Core/Services/TaskService.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; +using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Persistence; @@ -11,8 +12,8 @@ namespace Umbraco.Core.Services { public class TaskService : RepositoryService, ITaskService { - public TaskService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger) - : base(provider, repositoryFactory, logger) + public TaskService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { } diff --git a/src/Umbraco.Core/Services/UserService.cs b/src/Umbraco.Core/Services/UserService.cs index dd4866c8c3..192faf149b 100644 --- a/src/Umbraco.Core/Services/UserService.cs +++ b/src/Umbraco.Core/Services/UserService.cs @@ -17,25 +17,8 @@ namespace Umbraco.Core.Services /// public class UserService : RepositoryService, IUserService { - - [Obsolete("Use the constructors that specify all dependencies instead")] - public UserService(RepositoryFactory repositoryFactory) - : this(new PetaPocoUnitOfWorkProvider(), repositoryFactory) - { } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public UserService(IDatabaseUnitOfWorkProvider provider) - : this(provider, new RepositoryFactory()) - { } - - [Obsolete("Use the constructors that specify all dependencies instead")] - public UserService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory) - : base(provider, repositoryFactory, LoggerResolver.Current.Logger) - { - } - - public UserService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger) - : base(provider, repositoryFactory, logger) + public UserService(IDatabaseUnitOfWorkProvider provider, RepositoryFactory repositoryFactory, ILogger logger, IEventMessagesFactory eventMessagesFactory) + : base(provider, repositoryFactory, logger, eventMessagesFactory) { } diff --git a/src/Umbraco.Core/Standalone/ServiceContextManager.cs b/src/Umbraco.Core/Standalone/ServiceContextManager.cs index b036359dc6..e86a904439 100644 --- a/src/Umbraco.Core/Standalone/ServiceContextManager.cs +++ b/src/Umbraco.Core/Standalone/ServiceContextManager.cs @@ -2,6 +2,7 @@ using System.Diagnostics; using Umbraco.Core.Cache; using Umbraco.Core.Configuration; +using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Mappers; @@ -68,7 +69,8 @@ namespace Umbraco.Core.Standalone new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper, - new DebugDiagnosticsLogger()); + new DebugDiagnosticsLogger(), + new TransientMessagesFactory()); //initialize the DatabaseContext dbContext.Initialize(_providerName); diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 9266d16f36..1bdabacc9c 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -313,10 +313,16 @@ + + + + + + diff --git a/src/Umbraco.Tests/Mvc/UmbracoViewPageTests.cs b/src/Umbraco.Tests/Mvc/UmbracoViewPageTests.cs index e1a3a4203e..fd2dc02292 100644 --- a/src/Umbraco.Tests/Mvc/UmbracoViewPageTests.cs +++ b/src/Umbraco.Tests/Mvc/UmbracoViewPageTests.cs @@ -18,6 +18,7 @@ using Umbraco.Core.Services; using Umbraco.Web.Security; using umbraco.BusinessLogic; using Umbraco.Core; +using Umbraco.Core.Events; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; using Umbraco.Tests.PublishedContent; @@ -400,6 +401,7 @@ namespace Umbraco.Tests.Mvc new Mock().Object, new RepositoryFactory(CacheHelper.CreateDisabledCacheHelper(), logger, Mock.Of(), umbracoSettings), logger, + new TransientMessagesFactory(), new Mock().Object), new Mock().Object, new Mock().Object, diff --git a/src/Umbraco.Tests/Persistence/BaseTableByTableTest.cs b/src/Umbraco.Tests/Persistence/BaseTableByTableTest.cs index 7bc4b2b76f..19da8c68c1 100644 --- a/src/Umbraco.Tests/Persistence/BaseTableByTableTest.cs +++ b/src/Umbraco.Tests/Persistence/BaseTableByTableTest.cs @@ -6,6 +6,7 @@ using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models.Rdbms; using Umbraco.Core.ObjectResolution; @@ -59,7 +60,7 @@ namespace Umbraco.Tests.Persistence //assign the db context dbContext, //assign the service context - new ServiceContext(repositoryFactory, new PetaPocoUnitOfWorkProvider(_logger), new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper, _logger), + new ServiceContext(repositoryFactory, new PetaPocoUnitOfWorkProvider(_logger), new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper, _logger, new TransientMessagesFactory()), cacheHelper, new ProfilingLogger(_logger, Mock.Of())) { diff --git a/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs b/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs index 7077cf19ce..c59b075fc4 100644 --- a/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs +++ b/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs @@ -18,6 +18,7 @@ using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; using umbraco.editorControls.tinyMCE3; using umbraco.interfaces; +using Umbraco.Core.Events; namespace Umbraco.Tests.Services { @@ -55,7 +56,8 @@ namespace Umbraco.Tests.Services new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper, - Logger); + Logger, + new TransientMessagesFactory()); CreateTestData(); } diff --git a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs index 621837ee36..b2de63ebff 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs @@ -30,6 +30,7 @@ using Umbraco.Web.PublishedCache.XmlPublishedCache; using Umbraco.Web.Routing; using Umbraco.Web.Security; using umbraco.BusinessLogic; +using Umbraco.Core.Events; namespace Umbraco.Tests.TestHelpers { @@ -79,7 +80,7 @@ namespace Umbraco.Tests.TestHelpers //assign the db context new DatabaseContext(dbFactory, Logger, SqlSyntax, "System.Data.SqlServerCe.4.0"), //assign the service context - new ServiceContext(repositoryFactory, new PetaPocoUnitOfWorkProvider(dbFactory), new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper, Logger), + new ServiceContext(repositoryFactory, new PetaPocoUnitOfWorkProvider(dbFactory), new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper, Logger, new TransientMessagesFactory()), cacheHelper, ProfilingLogger) { diff --git a/src/Umbraco.Tests/TestHelpers/BaseUmbracoApplicationTest.cs b/src/Umbraco.Tests/TestHelpers/BaseUmbracoApplicationTest.cs index 3639a7709c..06ee2c6a22 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseUmbracoApplicationTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseUmbracoApplicationTest.cs @@ -19,6 +19,7 @@ using Umbraco.Core.Services; using Umbraco.Web; using Umbraco.Web.Models.Mapping; using umbraco.BusinessLogic; +using Umbraco.Core.Events; using ObjectExtensions = Umbraco.Core.ObjectExtensions; namespace Umbraco.Tests.TestHelpers @@ -157,7 +158,7 @@ namespace Umbraco.Tests.TestHelpers new DatabaseContext(new DefaultDatabaseFactory(Core.Configuration.GlobalSettings.UmbracoConnectionName, Logger), Logger, sqlSyntax, "System.Data.SqlServerCe.4.0"), //assign the service context - new ServiceContext(repoFactory, new PetaPocoUnitOfWorkProvider(Logger), new FileUnitOfWorkProvider(), new PublishingStrategy(), CacheHelper, Logger), + new ServiceContext(repoFactory, new PetaPocoUnitOfWorkProvider(Logger), new FileUnitOfWorkProvider(), new PublishingStrategy(), CacheHelper, Logger, new TransientMessagesFactory()), CacheHelper, ProfilingLogger) { diff --git a/src/Umbraco.Web/RequestLifespanMessagesFactory.cs b/src/Umbraco.Web/RequestLifespanMessagesFactory.cs new file mode 100644 index 0000000000..11842f9d45 --- /dev/null +++ b/src/Umbraco.Web/RequestLifespanMessagesFactory.cs @@ -0,0 +1,28 @@ +using System; +using Umbraco.Core.Events; + +namespace Umbraco.Web +{ + /// + /// Stores the instance of EventMessages in the current request so all events will share the same instance + /// + internal class RequestLifespanMessagesFactory : IEventMessagesFactory + { + private readonly IUmbracoContextAccessor _ctxAccessor; + + public RequestLifespanMessagesFactory(IUmbracoContextAccessor ctxAccessor) + { + if (ctxAccessor == null) throw new ArgumentNullException("ctxAccessor"); + _ctxAccessor = ctxAccessor; + } + + public EventMessages CreateMessages() + { + if (_ctxAccessor.Value.HttpContext.Items[typeof (RequestLifespanMessagesFactory).Name] == null) + { + _ctxAccessor.Value.HttpContext.Items[typeof(RequestLifespanMessagesFactory).Name] = new EventMessages(); + } + return (EventMessages)_ctxAccessor.Value.HttpContext.Items[typeof (RequestLifespanMessagesFactory).Name]; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Web/Standalone/ServiceContextManager.cs b/src/Umbraco.Web/Standalone/ServiceContextManager.cs index 32c0867429..2795f3b486 100644 --- a/src/Umbraco.Web/Standalone/ServiceContextManager.cs +++ b/src/Umbraco.Web/Standalone/ServiceContextManager.cs @@ -3,6 +3,7 @@ using System.Diagnostics; using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Configuration; +using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Mappers; @@ -62,7 +63,8 @@ namespace Umbraco.Web.Standalone new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper, - new DebugDiagnosticsLogger()); + new DebugDiagnosticsLogger(), + new TransientMessagesFactory()); //initialize the DatabaseContext dbContext.Initialize(_providerName); diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 94e5dbe0f2..605725598b 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -304,6 +304,7 @@ + diff --git a/src/Umbraco.Web/WebBootManager.cs b/src/Umbraco.Web/WebBootManager.cs index 628eba26ac..a1ff58e935 100644 --- a/src/Umbraco.Web/WebBootManager.cs +++ b/src/Umbraco.Web/WebBootManager.cs @@ -38,6 +38,10 @@ using Umbraco.Web.Scheduling; using Umbraco.Web.UI.JavaScript; using Umbraco.Web.WebApi; using umbraco.BusinessLogic; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.UnitOfWork; +using Umbraco.Core.Publishing; +using Umbraco.Core.Services; using GlobalSettings = Umbraco.Core.Configuration.GlobalSettings; using ProfilingViewEngine = Umbraco.Core.Profiling.ProfilingViewEngine; @@ -71,6 +75,25 @@ namespace Umbraco.Web _isForTesting = isForTesting; } + /// + /// Creates and returns the service context for the app + /// + /// + /// + /// + protected override ServiceContext CreateServiceContext(DatabaseContext dbContext, IDatabaseFactory dbFactory) + { + return new ServiceContext( + new RepositoryFactory(ApplicationCache, ProfilingLogger.Logger, dbContext.SqlSyntax, UmbracoConfig.For.UmbracoSettings()), + new PetaPocoUnitOfWorkProvider(dbFactory), + new FileUnitOfWorkProvider(), + new PublishingStrategy(), + ApplicationCache, + ProfilingLogger.Logger, + //use a request based messaging factory + new RequestLifespanMessagesFactory(new SingletonUmbracoContextAccessor())); + } + /// /// Initialize objects before anything during the boot cycle happens /// @@ -157,15 +180,7 @@ namespace Umbraco.Web //Set the profiler to be the web profiler ProfilerResolver.Current.SetProfiler(new WebProfiler()); } - - /// - /// Adds custom types to the ApplicationEventsResolver - /// - protected override void InitializeApplicationEventsResolver() - { - base.InitializeApplicationEventsResolver(); - } - + /// /// Ensure that the OnApplicationStarted methods of the IApplicationEvents are called /// @@ -285,7 +300,6 @@ namespace Umbraco.Web } } - private void RouteLocalApiController(Type controller, string umbracoPath) { var meta = PluginController.GetMetadata(controller); @@ -307,6 +321,7 @@ namespace Umbraco.Web } route.DataTokens.Add("umbraco", "api"); //ensure the umbraco token is set } + private void RouteLocalSurfaceController(Type controller, string umbracoPath) { var meta = PluginController.GetMetadata(controller); @@ -473,7 +488,6 @@ namespace Umbraco.Web new DefaultCultureDictionaryFactory()); } - private void OnInstanceOnBuildingEmptyIndexOnStartup(object sender, BuildingEmptyIndexOnStartupEventArgs args) { //store the indexer that needs rebuilding because it's empty for when the boot process