diff --git a/build/NuSpecs/UmbracoCms.Core.nuspec b/build/NuSpecs/UmbracoCms.Core.nuspec index 76fececf9b..eb84c78e38 100644 --- a/build/NuSpecs/UmbracoCms.Core.nuspec +++ b/build/NuSpecs/UmbracoCms.Core.nuspec @@ -29,7 +29,7 @@ - + diff --git a/src/Umbraco.Core/CoreBootManager.cs b/src/Umbraco.Core/CoreBootManager.cs index cab8d0a75b..ba60925b11 100644 --- a/src/Umbraco.Core/CoreBootManager.cs +++ b/src/Umbraco.Core/CoreBootManager.cs @@ -28,6 +28,8 @@ using Umbraco.Core.PropertyEditors; using Umbraco.Core.Publishing; using Umbraco.Core.Macros; using Umbraco.Core.Manifest; +using Umbraco.Core.Models.Identity; +using Umbraco.Core.Models.Membership; using Umbraco.Core.Services; using Umbraco.Core.Sync; using Umbraco.Core.Strings; @@ -183,6 +185,9 @@ namespace Umbraco.Core //Data Services/ServiceContext/etc... container.RegisterFrom(); + //ModelMappers + container.RegisterFrom(); + container.RegisterSingleton(); container.RegisterSingleton(factory => PluginManager); @@ -221,22 +226,18 @@ namespace Umbraco.Core } /// - /// This method allows for configuration of model mappers - /// - /// - /// Model mappers MUST be defined on ApplicationEventHandler instances with the interface IMapperConfiguration. - /// This allows us to search for less types on startup. - /// + /// This method initializes all of the model mappers registered in the container + /// protected void InitializeModelMappers() { Mapper.Initialize(configuration => + { + //foreach (var m in ApplicationEventsResolver.Current.ApplicationEventHandlers.OfType()) + foreach (var m in Container.GetAllInstances()) { - //foreach (var m in ApplicationEventsResolver.Current.ApplicationEventHandlers.OfType()) - foreach (var m in _appStartupEvtContainer.GetAllInstances().OfType()) - { - m.ConfigureMappings(configuration, ApplicationContext); - } - }); + m.ConfigureMappings(configuration, ApplicationContext); + } + }); } /// diff --git a/src/Umbraco.Core/DependencyInjection/CoreModelMappersCompositionRoot.cs b/src/Umbraco.Core/DependencyInjection/CoreModelMappersCompositionRoot.cs new file mode 100644 index 0000000000..ae5a215521 --- /dev/null +++ b/src/Umbraco.Core/DependencyInjection/CoreModelMappersCompositionRoot.cs @@ -0,0 +1,13 @@ +using LightInject; +using Umbraco.Core.Models.Identity; + +namespace Umbraco.Core.DependencyInjection +{ + public sealed class CoreModelMappersCompositionRoot : ICompositionRoot + { + public void Compose(IServiceRegistry container) + { + container.Register(); + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/DependencyInjection/ServicesCompositionRoot.cs b/src/Umbraco.Core/DependencyInjection/ServicesCompositionRoot.cs index 9eeefc5759..0326072447 100644 --- a/src/Umbraco.Core/DependencyInjection/ServicesCompositionRoot.cs +++ b/src/Umbraco.Core/DependencyInjection/ServicesCompositionRoot.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.IO; using System.Linq; using LightInject; diff --git a/src/Umbraco.Core/ModelMapperHelper.cs b/src/Umbraco.Core/ModelMapperHelper.cs index a76b68e7dd..d8d52678de 100644 --- a/src/Umbraco.Core/ModelMapperHelper.cs +++ b/src/Umbraco.Core/ModelMapperHelper.cs @@ -7,7 +7,7 @@ namespace Umbraco.Core /// internal static class ModelMapperHelper { - internal static IMappingExpression SelfMap(this IConfiguration config) + internal static IMappingExpression SelfMap(this IMapperConfiguration config) { return config.CreateMap(); } diff --git a/src/Umbraco.Core/Models/Identity/IdentityModelMappings.cs b/src/Umbraco.Core/Models/Identity/IdentityModelMappings.cs index 0dc95a8987..534b4367ff 100644 --- a/src/Umbraco.Core/Models/Identity/IdentityModelMappings.cs +++ b/src/Umbraco.Core/Models/Identity/IdentityModelMappings.cs @@ -1,21 +1,20 @@ using System; using System.Linq; using AutoMapper; - using Umbraco.Core.Models.Mapping; using Umbraco.Core.Models.Membership; using Umbraco.Core.Security; namespace Umbraco.Core.Models.Identity { - public class IdentityModelMappings : MapperConfiguration + public class IdentityModelMappings : ModelMapperConfiguration { - public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) + public override void ConfigureMappings(IMapperConfiguration config, ApplicationContext applicationContext) { config.CreateMap() .ForMember(user => user.Email, expression => expression.MapFrom(user => user.Email)) .ForMember(user => user.Id, expression => expression.MapFrom(user => user.Id)) - .ForMember(user => user.LockoutEndDateUtc, expression => expression.MapFrom(user => user.IsLockedOut ? DateTime.MaxValue.ToUniversalTime() : (DateTime?)null)) + .ForMember(user => user.LockoutEndDateUtc, expression => expression.MapFrom(user => user.IsLockedOut ? DateTime.MaxValue.ToUniversalTime() : (DateTime?) null)) .ForMember(user => user.UserName, expression => expression.MapFrom(user => user.Username)) .ForMember(user => user.PasswordHash, expression => expression.MapFrom(user => GetPasswordHash(user.RawPasswordValue))) .ForMember(user => user.Culture, expression => expression.MapFrom(user => user.GetUserCulture(applicationContext.Services.TextService))) @@ -24,7 +23,16 @@ namespace Umbraco.Core.Models.Identity .ForMember(user => user.StartContentId, expression => expression.MapFrom(user => user.StartContentId)) .ForMember(user => user.UserTypeAlias, expression => expression.MapFrom(user => user.UserType.Alias)) .ForMember(user => user.AccessFailedCount, expression => expression.MapFrom(user => user.FailedPasswordAttempts)) - .ForMember(user => user.AllowedSections, expression => expression.MapFrom(user => user.AllowedSections.ToArray())); + .ForMember(user => user.AllowedSections, expression => expression.MapFrom(user => user.AllowedSections.ToArray())) + .ForMember(user => user.LockoutEnabled, expression => expression.Ignore()) + .ForMember(user => user.Logins, expression => expression.Ignore()) + .ForMember(user => user.LoginsChanged, expression => expression.Ignore()) + .ForMember(user => user.EmailConfirmed, expression => expression.Ignore()) + .ForMember(user => user.PhoneNumber, expression => expression.Ignore()) + .ForMember(user => user.PhoneNumberConfirmed, expression => expression.Ignore()) + .ForMember(user => user.TwoFactorEnabled, expression => expression.Ignore()) + .ForMember(user => user.Roles, expression => expression.Ignore()) + .ForMember(user => user.Claims, expression => expression.Ignore()); config.CreateMap() .ConstructUsing((BackOfficeIdentityUser user) => new UserData(Guid.NewGuid().ToString("N"))) //this is the 'session id' diff --git a/src/Umbraco.Core/Models/Mapping/IMapperConfiguration.cs b/src/Umbraco.Core/Models/Mapping/IMapperConfiguration.cs deleted file mode 100644 index f9c0c2cc1e..0000000000 --- a/src/Umbraco.Core/Models/Mapping/IMapperConfiguration.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using AutoMapper; - -namespace Umbraco.Core.Models.Mapping -{ - /// - /// This is used to explicitly decorate any ApplicationEventHandler class if there are - /// AutoMapper configurations defined. - /// - /// - /// All automapper configurations are done during startup - /// inside an Automapper Initialize call which is better for performance - /// - public interface IMapperConfiguration : IApplicationEventHandler - { - void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext); - } -} diff --git a/src/Umbraco.Core/Models/Mapping/MapperConfiguration.cs b/src/Umbraco.Core/Models/Mapping/ModelMapperConfiguration.cs similarity index 58% rename from src/Umbraco.Core/Models/Mapping/MapperConfiguration.cs rename to src/Umbraco.Core/Models/Mapping/ModelMapperConfiguration.cs index 046f4429b2..863ce60369 100644 --- a/src/Umbraco.Core/Models/Mapping/MapperConfiguration.cs +++ b/src/Umbraco.Core/Models/Mapping/ModelMapperConfiguration.cs @@ -1,17 +1,17 @@ -using AutoMapper; - -namespace Umbraco.Core.Models.Mapping -{ - /// - /// Used to declare a mapper configuration - /// - /// - /// Use this class if your mapper configuration isn't also explicitly an ApplicationEventHandler. - /// - public abstract class MapperConfiguration : ApplicationEventHandler, IMapperConfiguration - { - public abstract void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext); - } - - +using AutoMapper; + +namespace Umbraco.Core.Models.Mapping +{ + /// + /// Used to declare a mapper configuration + /// + /// + /// Use this class if your mapper configuration isn't also explicitly an ApplicationEventHandler. + /// + public abstract class ModelMapperConfiguration + { + public abstract void ConfigureMappings(IMapperConfiguration config, ApplicationContext applicationContext); + } + + } \ No newline at end of file diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 518c20af5e..02d8ac1f84 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -37,8 +37,8 @@ false - - ..\packages\AutoMapper.4.1.1\lib\net45\AutoMapper.dll + + ..\packages\AutoMapper.4.2.1\lib\net45\AutoMapper.dll True @@ -288,6 +288,7 @@ + @@ -684,8 +685,7 @@ - - + diff --git a/src/Umbraco.Core/packages.config b/src/Umbraco.Core/packages.config index bcfc44c229..f8b0213c77 100644 --- a/src/Umbraco.Core/packages.config +++ b/src/Umbraco.Core/packages.config @@ -1,6 +1,6 @@  - + diff --git a/src/Umbraco.Tests/Configurations/UmbracoSettings/umbracoSettings.minimal.config b/src/Umbraco.Tests/Configurations/UmbracoSettings/umbracoSettings.minimal.config index e7deb293cc..0848a893d6 100644 --- a/src/Umbraco.Tests/Configurations/UmbracoSettings/umbracoSettings.minimal.config +++ b/src/Umbraco.Tests/Configurations/UmbracoSettings/umbracoSettings.minimal.config @@ -60,9 +60,6 @@ - - - diff --git a/src/Umbraco.Tests/Models/Mapping/AutoMapperTests.cs b/src/Umbraco.Tests/Models/Mapping/AutoMapperTests.cs index f385bf4954..8bc09292c4 100644 --- a/src/Umbraco.Tests/Models/Mapping/AutoMapperTests.cs +++ b/src/Umbraco.Tests/Models/Mapping/AutoMapperTests.cs @@ -1,10 +1,12 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using AutoMapper; using Moq; using NUnit.Framework; using Umbraco.Core.Logging; +using Umbraco.Core.Manifest; using Umbraco.Core.PropertyEditors; using Umbraco.Tests.TestHelpers; @@ -20,14 +22,15 @@ namespace Umbraco.Tests.Models.Mapping protected override void FreezeResolution() { Func> typeListProducerList = Enumerable.Empty; - var propertyEditorResolver = new Mock( - //ctor args - Mock.Of(), - Mock.Of(), + var propertyEditorResolver = new PropertyEditorResolver( + Container, + Logger, typeListProducerList, - Umbraco.Core.CacheHelper.CreateDisabledCacheHelper().RuntimeCache); + new ManifestBuilder( + Core.CacheHelper.CreateDisabledCacheHelper().RuntimeCache, + new ManifestParser(Logger, new DirectoryInfo(TestHelper.CurrentAssemblyDirectory), Core.CacheHelper.CreateDisabledCacheHelper().RuntimeCache))); - PropertyEditorResolver.Current = propertyEditorResolver.Object; + PropertyEditorResolver.Current = propertyEditorResolver; base.FreezeResolution(); } diff --git a/src/Umbraco.Tests/TestHelpers/BaseUmbracoApplicationTest.cs b/src/Umbraco.Tests/TestHelpers/BaseUmbracoApplicationTest.cs index 73a9bd1939..e6065e780d 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseUmbracoApplicationTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseUmbracoApplicationTest.cs @@ -30,6 +30,8 @@ using umbraco.BusinessLogic; using Umbraco.Core.DependencyInjection; using Umbraco.Core.Persistence.Mappers; using Umbraco.Core.Events; +using Umbraco.Core.Models.Identity; +using Umbraco.Web.DependencyInjection; using ObjectExtensions = Umbraco.Core.ObjectExtensions; namespace Umbraco.Tests.TestHelpers @@ -97,6 +99,10 @@ namespace Umbraco.Tests.TestHelpers { var settings = SettingsForTests.GetDefault(); + //register mappers + Container.RegisterFrom(); + Container.RegisterFrom(); + Container.Register(factory => Container); Container.Register(factory => PluginManager.Current); @@ -105,7 +111,7 @@ namespace Umbraco.Tests.TestHelpers //register basic stuff that might need to be there for some container resolvers to work, we can // add more to this in base classes in resolution freezing - Container.Register(factory => Logger); + Container.RegisterSingleton(factory => Logger); Container.Register(factory => CacheHelper); Container.Register(factory => ProfilingLogger); Container.RegisterSingleton(factory => SettingsForTests.GetDefault()); @@ -157,11 +163,7 @@ namespace Umbraco.Tests.TestHelpers { Mapper.Initialize(configuration => { - var mappers = PluginManager.Current.FindAndCreateInstances( - specificAssemblies: new[] - { - typeof(ContentModelMapper).Assembly - }); + var mappers = Container.GetAllInstances(); foreach (var mapper in mappers) { mapper.ConfigureMappings(configuration, ApplicationContext); diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 8dd049f1cf..db5c16a038 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -51,8 +51,8 @@ false - - ..\packages\AutoMapper.4.1.1\lib\net45\AutoMapper.dll + + ..\packages\AutoMapper.4.2.1\lib\net45\AutoMapper.dll True diff --git a/src/Umbraco.Tests/packages.config b/src/Umbraco.Tests/packages.config index ae388fe4e5..89fcc07e97 100644 --- a/src/Umbraco.Tests/packages.config +++ b/src/Umbraco.Tests/packages.config @@ -1,7 +1,7 @@  - + diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index bee59365e4..0860a1a437 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -108,8 +108,8 @@ {07fbc26b-2927-4a22-8d96-d644c667fecc} UmbracoExamine - - ..\packages\AutoMapper.4.1.1\lib\net45\AutoMapper.dll + + ..\packages\AutoMapper.4.2.1\lib\net45\AutoMapper.dll True diff --git a/src/Umbraco.Web.UI/packages.config b/src/Umbraco.Web.UI/packages.config index 3b9519d1d7..86dbb54fe0 100644 --- a/src/Umbraco.Web.UI/packages.config +++ b/src/Umbraco.Web.UI/packages.config @@ -1,6 +1,6 @@  - + diff --git a/src/Umbraco.Web/DependencyInjection/WebModelMappersCompositionRoot.cs b/src/Umbraco.Web/DependencyInjection/WebModelMappersCompositionRoot.cs new file mode 100644 index 0000000000..aba298e6a2 --- /dev/null +++ b/src/Umbraco.Web/DependencyInjection/WebModelMappersCompositionRoot.cs @@ -0,0 +1,25 @@ +using LightInject; +using Umbraco.Web.Models.Mapping; + +namespace Umbraco.Web.DependencyInjection +{ + public sealed class WebModelMappersCompositionRoot : ICompositionRoot + { + public void Compose(IServiceRegistry container) + { + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs b/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs index 1d2281eb9f..cd3df47b16 100644 --- a/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs @@ -21,9 +21,9 @@ namespace Umbraco.Web.Models.Mapping /// /// Declares how model mappings for content /// - internal class ContentModelMapper : MapperConfiguration + internal class ContentModelMapper : ModelMapperConfiguration { - public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) + public override void ConfigureMappings(IMapperConfiguration config, ApplicationContext applicationContext) { //FROM IContent TO ContentItemDisplay diff --git a/src/Umbraco.Web/Models/Mapping/ContentPropertyModelMapper.cs b/src/Umbraco.Web/Models/Mapping/ContentPropertyModelMapper.cs index ba51eb1790..6f09823644 100644 --- a/src/Umbraco.Web/Models/Mapping/ContentPropertyModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/ContentPropertyModelMapper.cs @@ -12,9 +12,9 @@ namespace Umbraco.Web.Models.Mapping /// A mapper which declares how to map content properties. These mappings are shared among media (and probably members) which is /// why they are in their own mapper /// - internal class ContentPropertyModelMapper : MapperConfiguration + internal class ContentPropertyModelMapper : ModelMapperConfiguration { - public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) + public override void ConfigureMappings(IMapperConfiguration config, ApplicationContext applicationContext) { var lazyDataTypeService = new Lazy(() => applicationContext.Services.DataTypeService); diff --git a/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapper.cs b/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapper.cs index 70d8bc8d7a..4ef1991b40 100644 --- a/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapper.cs @@ -16,7 +16,7 @@ namespace Umbraco.Web.Models.Mapping /// /// Defines mappings for content/media/members type mappings /// - internal class ContentTypeModelMapper : MapperConfiguration + internal class ContentTypeModelMapper : ModelMapperConfiguration { private readonly Lazy _propertyEditorResolver; @@ -32,7 +32,7 @@ namespace Umbraco.Web.Models.Mapping _propertyEditorResolver = propertyEditorResolver; } - public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) + public override void ConfigureMappings(IMapperConfiguration config, ApplicationContext applicationContext) { config.CreateMap() diff --git a/src/Umbraco.Web/Models/Mapping/DataTypeModelMapper.cs b/src/Umbraco.Web/Models/Mapping/DataTypeModelMapper.cs index 3df195e073..515db330b5 100644 --- a/src/Umbraco.Web/Models/Mapping/DataTypeModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/DataTypeModelMapper.cs @@ -14,9 +14,9 @@ namespace Umbraco.Web.Models.Mapping /// /// Configure's model mappings for Data types /// - internal class DataTypeModelMapper : MapperConfiguration + internal class DataTypeModelMapper : ModelMapperConfiguration { - public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) + public override void ConfigureMappings(IMapperConfiguration config, ApplicationContext applicationContext) { var lazyDataTypeService = new Lazy(() => applicationContext.Services.DataTypeService); diff --git a/src/Umbraco.Web/Models/Mapping/EntityModelMapper.cs b/src/Umbraco.Web/Models/Mapping/EntityModelMapper.cs index 5610a70008..f6e13fada4 100644 --- a/src/Umbraco.Web/Models/Mapping/EntityModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/EntityModelMapper.cs @@ -12,9 +12,9 @@ using UmbracoExamine; namespace Umbraco.Web.Models.Mapping { - internal class EntityModelMapper : MapperConfiguration + internal class EntityModelMapper : ModelMapperConfiguration { - public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) + public override void ConfigureMappings(IMapperConfiguration config, ApplicationContext applicationContext) { config.CreateMap() .ForMember(basic => basic.Icon, expression => expression.MapFrom(entity => entity.ContentTypeIcon)) diff --git a/src/Umbraco.Web/Models/Mapping/LogModelMapper.cs b/src/Umbraco.Web/Models/Mapping/LogModelMapper.cs index d829da89d1..349141ea4e 100644 --- a/src/Umbraco.Web/Models/Mapping/LogModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/LogModelMapper.cs @@ -7,12 +7,14 @@ using Umbraco.Core.Models; namespace Umbraco.Web.Models.Mapping { - internal class LogModelMapper : MapperConfiguration + internal class LogModelMapper : ModelMapperConfiguration { - public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) + public override void ConfigureMappings(IMapperConfiguration config, ApplicationContext applicationContext) { config.CreateMap() - .ForMember(log => log.LogType, expression => expression.MapFrom(item => item.AuditType.ToString())); + .ForMember(log => log.NodeId, expression => expression.Ignore()) + .ForMember(log => log.Timestamp, expression => expression.MapFrom(item => item.CreateDate)) + .ForMember(log => log.LogType, expression => expression.MapFrom(item => item.AuditType.ToString())); } } } \ No newline at end of file diff --git a/src/Umbraco.Web/Models/Mapping/MacroModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MacroModelMapper.cs index 54ebca6e68..eb8497c948 100644 --- a/src/Umbraco.Web/Models/Mapping/MacroModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/MacroModelMapper.cs @@ -14,9 +14,9 @@ namespace Umbraco.Web.Models.Mapping /// /// Declares model mappings for macros. /// - internal class MacroModelMapper : MapperConfiguration + internal class MacroModelMapper : ModelMapperConfiguration { - public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) + public override void ConfigureMappings(IMapperConfiguration config, ApplicationContext applicationContext) { //FROM IMacro TO EntityBasic config.CreateMap() diff --git a/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs index 799a93a220..90b61841a6 100644 --- a/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs @@ -23,9 +23,9 @@ namespace Umbraco.Web.Models.Mapping /// /// Declares model mappings for media. /// - internal class MediaModelMapper : MapperConfiguration + internal class MediaModelMapper : ModelMapperConfiguration { - public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) + public override void ConfigureMappings(IMapperConfiguration config, ApplicationContext applicationContext) { //FROM IMedia TO MediaItemDisplay config.CreateMap() diff --git a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs index 06dd39124d..3d2b250225 100644 --- a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs @@ -22,9 +22,9 @@ namespace Umbraco.Web.Models.Mapping /// /// Declares model mappings for members. /// - internal class MemberModelMapper : MapperConfiguration + internal class MemberModelMapper : ModelMapperConfiguration { - public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) + public override void ConfigureMappings(IMapperConfiguration config, ApplicationContext applicationContext) { //FROM MembershipUser TO MediaItemDisplay - used when using a non-umbraco membership provider config.CreateMap() diff --git a/src/Umbraco.Web/Models/Mapping/RelationModelMapper.cs b/src/Umbraco.Web/Models/Mapping/RelationModelMapper.cs index bc133abf96..11b435a21d 100644 --- a/src/Umbraco.Web/Models/Mapping/RelationModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/RelationModelMapper.cs @@ -7,9 +7,9 @@ using RelationType = Umbraco.Web.Models.ContentEditing.RelationType; namespace Umbraco.Web.Models.Mapping { - internal class RelationModelMapper : MapperConfiguration + internal class RelationModelMapper : ModelMapperConfiguration { - public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) + public override void ConfigureMappings(IMapperConfiguration config, ApplicationContext applicationContext) { //FROM IRelationType TO RelationType config.CreateMap(); diff --git a/src/Umbraco.Web/Models/Mapping/SectionModelMapper.cs b/src/Umbraco.Web/Models/Mapping/SectionModelMapper.cs index bcd7590433..e72db45bdf 100644 --- a/src/Umbraco.Web/Models/Mapping/SectionModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/SectionModelMapper.cs @@ -8,9 +8,9 @@ using umbraco; namespace Umbraco.Web.Models.Mapping { - internal class SectionModelMapper : MapperConfiguration + internal class SectionModelMapper : ModelMapperConfiguration { - public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) + public override void ConfigureMappings(IMapperConfiguration config, ApplicationContext applicationContext) { config.CreateMap() .ForMember( diff --git a/src/Umbraco.Web/Models/Mapping/TabModelMapper.cs b/src/Umbraco.Web/Models/Mapping/TabModelMapper.cs index 0bdfb311a5..466b123df7 100644 --- a/src/Umbraco.Web/Models/Mapping/TabModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/TabModelMapper.cs @@ -5,9 +5,9 @@ using Umbraco.Core.Models.Mapping; namespace Umbraco.Web.Models.Mapping { - internal class TabModelMapper : MapperConfiguration + internal class TabModelMapper : ModelMapperConfiguration { - public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) + public override void ConfigureMappings(IMapperConfiguration config, ApplicationContext applicationContext) { config.CreateMap(); } diff --git a/src/Umbraco.Web/Models/Mapping/UserModelMapper.cs b/src/Umbraco.Web/Models/Mapping/UserModelMapper.cs index 72093b19a8..11bc2e8419 100644 --- a/src/Umbraco.Web/Models/Mapping/UserModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/UserModelMapper.cs @@ -11,9 +11,9 @@ using Umbraco.Core.Security; namespace Umbraco.Web.Models.Mapping { - internal class UserModelMapper : MapperConfiguration + internal class UserModelMapper : ModelMapperConfiguration { - public override void ConfigureMappings(IConfiguration config, ApplicationContext applicationContext) + public override void ConfigureMappings(IMapperConfiguration config, ApplicationContext applicationContext) { config.CreateMap() .ForMember(detail => detail.UserId, opt => opt.MapFrom(user => GetIntId(user.Id))) diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 6b5c03000d..6f39ec21d8 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -97,10 +97,8 @@ {07fbc26b-2927-4a22-8d96-d644c667fecc} UmbracoExamine - - ..\packages\AutoMapper.4.1.1\lib\net45\AutoMapper.dll - False - False + + ..\packages\AutoMapper.4.2.1\lib\net45\AutoMapper.dll True @@ -320,6 +318,7 @@ + diff --git a/src/Umbraco.Web/WebBootManager.cs b/src/Umbraco.Web/WebBootManager.cs index b81be47d33..545d7d7e24 100644 --- a/src/Umbraco.Web/WebBootManager.cs +++ b/src/Umbraco.Web/WebBootManager.cs @@ -41,6 +41,7 @@ using Umbraco.Core.Services; using Umbraco.Web.Services; using Umbraco.Web.Editors; using Umbraco.Core.DependencyInjection; +using Umbraco.Web.DependencyInjection; using Umbraco.Web._Legacy.Actions; using Action = System.Action; using GlobalSettings = Umbraco.Core.Configuration.GlobalSettings; @@ -330,6 +331,9 @@ namespace Umbraco.Web { base.ConfigureCoreServices(container); + //ModelMappers + container.RegisterFrom(); + container.EnablePerWebRequestScope(); //no need to declare as per request, it's lifetime is already managed as a singleton diff --git a/src/Umbraco.Web/packages.config b/src/Umbraco.Web/packages.config index b22330600c..2cdde6b199 100644 --- a/src/Umbraco.Web/packages.config +++ b/src/Umbraco.Web/packages.config @@ -1,6 +1,6 @@  - +