diff --git a/src/Umbraco.Core/CoreBootManager.cs b/src/Umbraco.Core/CoreBootManager.cs index 9e30893426..d04a15500e 100644 --- a/src/Umbraco.Core/CoreBootManager.cs +++ b/src/Umbraco.Core/CoreBootManager.cs @@ -401,9 +401,11 @@ namespace Umbraco.Core var manifestParser = new ManifestParser(ProfilingLogger.Logger, new DirectoryInfo(IOHelper.MapPath("~/App_Plugins")), ApplicationCache.RuntimeCache); var manifestBuilder = new ManifestBuilder(ApplicationCache.RuntimeCache, manifestParser); - PropertyEditorResolver.Current = new PropertyEditorResolver( - Container, ProfilingLogger.Logger, () => PluginManager.ResolvePropertyEditors(), - manifestBuilder); + Container.Register(_ => manifestBuilder); // will be injected in eg PropertyEditorCollectionBuilder + + PropertyEditorCollectionBuilder.Register(Container) + .AddProducer(() => PluginManager.ResolvePropertyEditors()); + ParameterEditorResolver.Current = new ParameterEditorResolver( Container, ProfilingLogger.Logger, () => PluginManager.ResolveParameterEditors(), manifestBuilder); diff --git a/src/Umbraco.Core/DependencyInjection/Current.cs b/src/Umbraco.Core/DependencyInjection/Current.cs index dd01bcdc12..5e6f31b897 100644 --- a/src/Umbraco.Core/DependencyInjection/Current.cs +++ b/src/Umbraco.Core/DependencyInjection/Current.cs @@ -1,6 +1,7 @@ using System; using LightInject; using Umbraco.Core.Cache; +using Umbraco.Core.PropertyEditors; using Umbraco.Core.Strings; namespace Umbraco.Core.DependencyInjection @@ -46,6 +47,9 @@ namespace Umbraco.Core.DependencyInjection public static CacheRefresherCollection CacheRefreshers => Container.GetInstance(); + public static PropertyEditorCollection PropertyEditors + => Container.GetInstance(); + #endregion } } diff --git a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/UpdateControlIdToPropertyEditorAlias.cs b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/UpdateControlIdToPropertyEditorAlias.cs index 94bca55e03..44dd2c34f9 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/UpdateControlIdToPropertyEditorAlias.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Upgrades/TargetVersionSeven/UpdateControlIdToPropertyEditorAlias.cs @@ -1,5 +1,6 @@ using System; using Umbraco.Core.Configuration; +using Umbraco.Core.DependencyInjection; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.PropertyEditors; @@ -30,7 +31,7 @@ namespace Umbraco.Core.Persistence.Migrations.Upgrades.TargetVersionSeven if (alias != null) { //check that the new property editor exists with that alias - var editor = PropertyEditorResolver.Current.GetByAlias(alias); + var editor = Current.PropertyEditors[alias]; if (editor == null) { //We cannot find a map for this property editor so we're going to make it a label. This is because: diff --git a/src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs index e49a1decc5..ad804bad84 100644 --- a/src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using NPoco; using Umbraco.Core.Cache; using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.DependencyInjection; using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models; @@ -439,7 +440,7 @@ namespace Umbraco.Core.Persistence.Repositories foreach (var property in properties) { //NOTE: The benchmarks run with and without the following code show very little change so this is not a perf bottleneck - var editor = PropertyEditorResolver.Current.GetByAlias(property.PropertyType.PropertyEditorAlias); + var editor = Current.PropertyEditors[property.PropertyType.PropertyEditorAlias]; var tagSupport = propertiesWithTagSupport.ContainsKey(property.PropertyType.PropertyEditorAlias) ? propertiesWithTagSupport[property.PropertyType.PropertyEditorAlias] diff --git a/src/Umbraco.Core/PropertyEditors/PropertyEditorCollection.cs b/src/Umbraco.Core/PropertyEditors/PropertyEditorCollection.cs new file mode 100644 index 0000000000..d7884d109d --- /dev/null +++ b/src/Umbraco.Core/PropertyEditors/PropertyEditorCollection.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using System.Linq; +using Umbraco.Core.DependencyInjection; + +namespace Umbraco.Core.PropertyEditors +{ + public class PropertyEditorCollection : BuilderCollectionBase + { + public PropertyEditorCollection(IEnumerable items) + : base(items) + { } + + // note: virtual so it can be mocked + public virtual PropertyEditor this[string alias] + => this.SingleOrDefault(x => x.Alias == alias); + } +} diff --git a/src/Umbraco.Core/PropertyEditors/PropertyEditorCollectionBuilder.cs b/src/Umbraco.Core/PropertyEditors/PropertyEditorCollectionBuilder.cs new file mode 100644 index 0000000000..9a9f5fda08 --- /dev/null +++ b/src/Umbraco.Core/PropertyEditors/PropertyEditorCollectionBuilder.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using System.Linq; +using LightInject; +using Umbraco.Core.DependencyInjection; +using Umbraco.Core.Manifest; + +namespace Umbraco.Core.PropertyEditors +{ + internal class PropertyEditorCollectionBuilder : LazyCollectionBuilderBase + { + private readonly ManifestBuilder _manifestBuilder; + + public PropertyEditorCollectionBuilder(IServiceContainer container, ManifestBuilder manifestBuilder) + : base(container) + { + _manifestBuilder = manifestBuilder; + } + + protected override PropertyEditorCollectionBuilder This => this; + + protected override IEnumerable CreateItems(params object[] args) + { + return base.CreateItems(args).Union(_manifestBuilder.PropertyEditors); + } + } +} diff --git a/src/Umbraco.Core/PropertyEditors/PropertyEditorResolver.cs b/src/Umbraco.Core/PropertyEditors/PropertyEditorResolver.cs deleted file mode 100644 index 018d5fd762..0000000000 --- a/src/Umbraco.Core/PropertyEditors/PropertyEditorResolver.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using LightInject; -using Umbraco.Core.Cache; -using Umbraco.Core.Logging; -using Umbraco.Core.IO; -using Umbraco.Core.Manifest; -using Umbraco.Core.ObjectResolution; - -namespace Umbraco.Core.PropertyEditors -{ - /// - /// A resolver to resolve all property editors - /// - /// - /// This resolver will contain any property editors defined in manifests as well! - /// - public class PropertyEditorResolver : ContainerLazyManyObjectsResolver - { - private readonly ManifestBuilder _builder; - - internal PropertyEditorResolver(IServiceContainer container, ILogger logger, Func> typeListProducerList, ManifestBuilder builder) - : base(container, logger, typeListProducerList, ObjectLifetimeScope.Application) - { - _builder = builder; - _unioned = new Lazy>(() => Values.Union(builder.PropertyEditors).ToList()); - } - - private readonly Lazy> _unioned; - - /// - /// Returns the property editors - /// - public virtual IEnumerable PropertyEditors - { - get { return _unioned.Value; } - } - - /// - /// Returns a property editor by alias - /// - /// - /// - public virtual PropertyEditor GetByAlias(string alias) - { - return PropertyEditors.SingleOrDefault(x => x.Alias == alias); - } - } -} \ No newline at end of file diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/JsonValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/JsonValueConverter.cs index 1a718943ee..bfee8768c3 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/JsonValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/JsonValueConverter.cs @@ -1,6 +1,7 @@ using System; using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using Umbraco.Core.DependencyInjection; using Umbraco.Core.Logging; using Umbraco.Core.Models.PublishedContent; @@ -22,7 +23,7 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters /// public override bool IsConverter(PublishedPropertyType propertyType) { - var propertyEditor = PropertyEditorResolver.Current.GetByAlias(propertyType.PropertyEditorAlias); + var propertyEditor = Current.PropertyEditors[propertyType.PropertyEditorAlias]; if (propertyEditor == null) return false; return propertyEditor.ValueEditor.ValueType.InvariantEquals(PropertyEditorValueTypes.Json); } diff --git a/src/Umbraco.Core/Services/EntityXmlSerializer.cs b/src/Umbraco.Core/Services/EntityXmlSerializer.cs index a290774829..b4fb2b843e 100644 --- a/src/Umbraco.Core/Services/EntityXmlSerializer.cs +++ b/src/Umbraco.Core/Services/EntityXmlSerializer.cs @@ -6,6 +6,7 @@ using System.Web; using System.Xml; using System.Xml.Linq; using Umbraco.Core.Configuration; +using Umbraco.Core.DependencyInjection; using Umbraco.Core.Models; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.PropertyEditors; @@ -140,7 +141,7 @@ namespace Umbraco.Core.Services //Get the property editor for thsi property and let it convert it to the xml structure - var propertyEditor = PropertyEditorResolver.Current.GetByAlias(property.PropertyType.PropertyEditorAlias); + var propertyEditor = Current.PropertyEditors[property.PropertyType.PropertyEditorAlias]; if (propertyEditor != null) { var xmlValue = propertyEditor.ValueEditor.ConvertDbToXml(property, propertyType, dataTypeService); diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 809a135f87..a42d9637b9 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -446,6 +446,8 @@ + + @@ -1041,7 +1043,6 @@ - diff --git a/src/Umbraco.Tests/Models/Mapping/AutoMapperTests.cs b/src/Umbraco.Tests/Models/Mapping/AutoMapperTests.cs index d01c473fe0..8f123bfba0 100644 --- a/src/Umbraco.Tests/Models/Mapping/AutoMapperTests.cs +++ b/src/Umbraco.Tests/Models/Mapping/AutoMapperTests.cs @@ -17,23 +17,18 @@ namespace Umbraco.Tests.Models.Mapping [TestFixture] public class AutoMapperTests : BaseUmbracoApplicationTest { - /// - /// Inheritors can override this to setup any resolvers before resolution is frozen - /// - protected override void FreezeResolution() + protected override void ConfigureContainer() { + base.ConfigureContainer(); + + var manifestBuilder = new ManifestBuilder( + CacheHelper.CreateDisabledCacheHelper().RuntimeCache, + new ManifestParser(Logger, new DirectoryInfo(TestHelper.CurrentAssemblyDirectory), CacheHelper.CreateDisabledCacheHelper().RuntimeCache)); + Container.Register(_ => manifestBuilder); + Func> typeListProducerList = Enumerable.Empty; - var propertyEditorResolver = new PropertyEditorResolver( - Container, - Logger, - typeListProducerList, - new ManifestBuilder( - CacheHelper.CreateDisabledCacheHelper().RuntimeCache, - new ManifestParser(Logger, new DirectoryInfo(TestHelper.CurrentAssemblyDirectory), CacheHelper.CreateDisabledCacheHelper().RuntimeCache))); - - PropertyEditorResolver.Current = propertyEditorResolver; - - base.FreezeResolution(); + PropertyEditorCollectionBuilder.Register(Container) + .AddProducer(typeListProducerList); } [Test] diff --git a/src/Umbraco.Tests/Models/Mapping/ContentTypeModelMappingTests.cs b/src/Umbraco.Tests/Models/Mapping/ContentTypeModelMappingTests.cs index 50df11aea4..0d9c11ef8c 100644 --- a/src/Umbraco.Tests/Models/Mapping/ContentTypeModelMappingTests.cs +++ b/src/Umbraco.Tests/Models/Mapping/ContentTypeModelMappingTests.cs @@ -33,7 +33,6 @@ namespace Umbraco.Tests.Models.Mapping private readonly Mock _contentTypeService = new Mock(); private readonly Mock _contentService = new Mock(); private readonly Mock _dataTypeService = new Mock(); - private Mock _propertyEditorResolver; private readonly Mock _entityService = new Mock(); private readonly Mock _fileService = new Mock(); @@ -48,7 +47,7 @@ namespace Umbraco.Tests.Models.Mapping //Create an app context using mocks var appContext = new ApplicationContext( new DatabaseContext(databaseFactory, logger), - + //Create service context using mocks new ServiceContext( @@ -56,22 +55,20 @@ namespace Umbraco.Tests.Models.Mapping contentTypeService:_contentTypeService.Object, dataTypeService:_dataTypeService.Object, entityService:_entityService.Object, - fileService: _fileService.Object), + fileService: _fileService.Object), nullCacheHelper, new ProfilingLogger(logger, Mock.Of())); - - //create a fake property editor resolver to return fake property editors - Func> typeListProducerList = Enumerable.Empty; - _propertyEditorResolver = new Mock( - //ctor args - Mock.Of(), logger, typeListProducerList, - new ManifestBuilder(nullCacheHelper.RuntimeCache, new ManifestParser(logger, new DirectoryInfo(TestHelper.CurrentAssemblyDirectory), Mock.Of()))); - + + // create a fake property editor collection to return fake property editors + var editors = new PropertyEditor[] { new TextboxPropertyEditor(Mock.Of()), }; + var editorsMock = new Mock(new object[] { editors }); + editorsMock.Setup(x => x[It.IsAny()]).Returns(editors[0]); + Mapper.Initialize(configuration => { //initialize our content type mapper - var mapper = new ContentTypeModelMapper(new Lazy(() => _propertyEditorResolver.Object)); + var mapper = new ContentTypeModelMapper(editorsMock.Object); mapper.ConfigureMappings(configuration, appContext); var entityMapper = new EntityModelMapper(); entityMapper.ConfigureMappings(configuration, appContext); @@ -149,7 +146,7 @@ namespace Umbraco.Tests.Models.Mapping definition => definition.Id == 555 && definition.PropertyEditorAlias == "myPropertyType" - && definition.DatabaseType == DataTypeDatabaseType.Nvarchar)); + && definition.DatabaseType == DataTypeDatabaseType.Nvarchar)); var display = CreateMediaTypeSave(); @@ -185,7 +182,7 @@ namespace Umbraco.Tests.Models.Mapping Assert.AreEqual(propTypes.ElementAt(j).Id, result.PropertyTypes.ElementAt(j).Id); Assert.AreEqual(propTypes.ElementAt(j).DataTypeId, result.PropertyTypes.ElementAt(j).DataTypeDefinitionId); } - } + } Assert.AreEqual(display.AllowedContentTypes.Count(), result.AllowedContentTypes.Count()); for (var i = 0; i < display.AllowedContentTypes.Count(); i++) @@ -200,11 +197,11 @@ namespace Umbraco.Tests.Models.Mapping //Arrange // setup the mocks to return the data we want to test against... - + _dataTypeService.Setup(x => x.GetDataTypeDefinitionById(It.IsAny())) .Returns(Mock.Of( - definition => - definition.Id == 555 + definition => + definition.Id == 555 && definition.PropertyEditorAlias == "myPropertyType" && definition.DatabaseType == DataTypeDatabaseType.Nvarchar)); @@ -213,7 +210,7 @@ namespace Umbraco.Tests.Models.Mapping .Returns((string alias) => Mock.Of( definition => definition.Id == alias.GetHashCode() && definition.Alias == alias)); - + var display = CreateContentTypeSave(); @@ -235,7 +232,7 @@ namespace Umbraco.Tests.Models.Mapping Assert.AreEqual(display.AllowAsRoot, result.AllowedAsRoot); Assert.AreEqual(display.CreateDate, result.CreateDate); Assert.AreEqual(display.UpdateDate, result.UpdateDate); - + //TODO: Now we need to assert all of the more complicated parts Assert.AreEqual(display.Groups.Count(), result.PropertyGroups.Count); for (var i = 0; i < display.Groups.Count(); i++) @@ -334,16 +331,9 @@ namespace Umbraco.Tests.Models.Mapping _dataTypeService.Setup(x => x.GetPreValuesCollectionByDataTypeId(It.IsAny())) .Returns(new PreValueCollection(new Dictionary())); - //return a textbox property editor for any requested editor by alias - _propertyEditorResolver.Setup(resolver => resolver.GetByAlias(It.IsAny())) - .Returns(new TextboxPropertyEditor(Mock.Of())); - //for testing, just return a list of whatever property editors we want - _propertyEditorResolver.Setup(resolver => resolver.PropertyEditors) - .Returns(new[] { new TextboxPropertyEditor(Mock.Of()) }); - var memberType = MockedContentTypes.CreateSimpleMemberType(); memberType.MemberTypePropertyTypes[memberType.PropertyTypes.Last().Alias] = new MemberTypePropertyProfileAccess(true, true); - + MockedContentTypes.EnsureAllIds(memberType, 8888); //Act @@ -378,7 +368,7 @@ namespace Umbraco.Tests.Models.Mapping { Assert.AreEqual(propTypes.ElementAt(j).Id, result.Groups.ElementAt(i).Properties.ElementAt(j).Id); Assert.AreEqual(propTypes.ElementAt(j).DataTypeDefinitionId, result.Groups.ElementAt(i).Properties.ElementAt(j).DataTypeId); - + Assert.AreEqual(memberType.MemberCanViewProperty(propTypes.ElementAt(j).Alias), result.Groups.ElementAt(i).Properties.ElementAt(j).MemberCanViewProperty); Assert.AreEqual(memberType.MemberCanEditProperty(propTypes.ElementAt(j).Alias), result.Groups.ElementAt(i).Properties.ElementAt(j).MemberCanEditProperty); } @@ -404,13 +394,6 @@ namespace Umbraco.Tests.Models.Mapping _dataTypeService.Setup(x => x.GetPreValuesCollectionByDataTypeId(It.IsAny())) .Returns(new PreValueCollection(new Dictionary())); - //return a textbox property editor for any requested editor by alias - _propertyEditorResolver.Setup(resolver => resolver.GetByAlias(It.IsAny())) - .Returns(new TextboxPropertyEditor(Mock.Of())); - //for testing, just return a list of whatever property editors we want - _propertyEditorResolver.Setup(resolver => resolver.PropertyEditors) - .Returns(new[] { new TextboxPropertyEditor(Mock.Of()) }); - var mediaType = MockedContentTypes.CreateImageMediaType(); MockedContentTypes.EnsureAllIds(mediaType, 8888); @@ -448,7 +431,7 @@ namespace Umbraco.Tests.Models.Mapping Assert.AreEqual(propTypes.ElementAt(j).DataTypeDefinitionId, result.Groups.ElementAt(i).Properties.ElementAt(j).DataTypeId); } } - + Assert.AreEqual(mediaType.AllowedContentTypes.Count(), result.AllowedContentTypes.Count()); for (var i = 0; i < mediaType.AllowedContentTypes.Count(); i++) { @@ -469,13 +452,6 @@ namespace Umbraco.Tests.Models.Mapping _dataTypeService.Setup(x => x.GetPreValuesCollectionByDataTypeId(It.IsAny())) .Returns(new PreValueCollection(new Dictionary())); - //return a textbox property editor for any requested editor by alias - _propertyEditorResolver.Setup(resolver => resolver.GetByAlias(It.IsAny())) - .Returns(new TextboxPropertyEditor(Mock.Of())); - //for testing, just return a list of whatever property editors we want - _propertyEditorResolver.Setup(resolver => resolver.PropertyEditors) - .Returns(new[] { new TextboxPropertyEditor(Mock.Of()) }); - var contentType = MockedContentTypes.CreateTextpageContentType(); MockedContentTypes.EnsureAllIds(contentType, 8888); @@ -726,7 +702,7 @@ namespace Umbraco.Tests.Models.Mapping Assert.AreEqual(basic.SortOrder, result.SortOrder); Assert.AreEqual(basic.Alias, result.Alias); Assert.AreEqual(basic.Description, result.Description); - Assert.AreEqual(basic.DataTypeId, result.DataTypeDefinitionId); + Assert.AreEqual(basic.DataTypeId, result.DataTypeDefinitionId); Assert.AreEqual(basic.Label, result.Name); Assert.AreEqual(basic.Validation.Mandatory, result.Mandatory); Assert.AreEqual(basic.Validation.Pattern, result.ValidationRegExp); @@ -747,13 +723,6 @@ namespace Umbraco.Tests.Models.Mapping _entityService.Setup(x => x.GetObjectType(It.IsAny())) .Returns(UmbracoObjectTypes.DocumentType); - //return a textbox property editor for any requested editor by alias - _propertyEditorResolver.Setup(resolver => resolver.GetByAlias(It.IsAny())) - .Returns(new TextboxPropertyEditor(Mock.Of())); - //for testing, just return a list of whatever property editors we want - _propertyEditorResolver.Setup(resolver => resolver.PropertyEditors) - .Returns(new[] { new TextboxPropertyEditor(Mock.Of()) }); - var ctMain = MockedContentTypes.CreateSimpleMediaType("parent", "Parent"); //not assigned to tab ctMain.AddPropertyType(new PropertyType(Constants.PropertyEditors.TextboxAlias, DataTypeDatabaseType.Ntext) @@ -826,7 +795,7 @@ namespace Umbraco.Tests.Models.Mapping Assert.AreEqual(2, result.Groups.Count(x => x.ParentTabContentTypes.Any())); Assert.IsTrue(result.Groups.SelectMany(x => x.ParentTabContentTypes).ContainsAll(new[] { ctMain.Id, ctChild1.Id })); - + Assert.AreEqual(contentType.AllowedContentTypes.Count(), result.AllowedContentTypes.Count()); for (var i = 0; i < contentType.AllowedContentTypes.Count(); i++) { @@ -850,13 +819,6 @@ namespace Umbraco.Tests.Models.Mapping _entityService.Setup(x => x.GetObjectType(It.IsAny())) .Returns(UmbracoObjectTypes.DocumentType); - //return a textbox property editor for any requested editor by alias - _propertyEditorResolver.Setup(resolver => resolver.GetByAlias(It.IsAny())) - .Returns(new TextboxPropertyEditor(Mock.Of())); - //for testing, just return a list of whatever property editors we want - _propertyEditorResolver.Setup(resolver => resolver.PropertyEditors) - .Returns(new[] { new TextboxPropertyEditor(Mock.Of()) }); - var ctMain = MockedContentTypes.CreateSimpleContentType(); //not assigned to tab ctMain.AddPropertyType(new PropertyType(Constants.PropertyEditors.TextboxAlias, DataTypeDatabaseType.Ntext) @@ -882,7 +844,7 @@ namespace Umbraco.Tests.Models.Mapping Alias = "umbracoUrlAlias", Name = "AltUrl", Description = "", Mandatory = false, SortOrder = 1, DataTypeDefinitionId = -88 }); MockedContentTypes.EnsureAllIds(contentType, 6666); - + //Act @@ -1025,7 +987,7 @@ namespace Umbraco.Tests.Models.Mapping Groups = new[] { new PropertyGroupBasic() - { + { Id = 987, Name = "Tab 1", SortOrder = 0, @@ -1059,7 +1021,7 @@ namespace Umbraco.Tests.Models.Mapping return new MediaTypeSave { Alias = "test", - AllowAsRoot = true, + AllowAsRoot = true, AllowedContentTypes = new[] { 666, 667 }, Description = "hello world", Icon = "tree-icon", @@ -1101,10 +1063,10 @@ namespace Umbraco.Tests.Models.Mapping } private DocumentTypeSave CreateContentTypeSave() - { + { return new DocumentTypeSave { - Alias = "test", + Alias = "test", AllowAsRoot = true, AllowedTemplates = new [] { @@ -1129,11 +1091,11 @@ namespace Umbraco.Tests.Models.Mapping Id = 987, Name = "Tab 1", SortOrder = 0, - Inherited = false, + Inherited = false, Properties = new [] { new PropertyTypeBasic - { + { Alias = "property1", Description = "this is property 1", Inherited = false, @@ -1157,7 +1119,7 @@ namespace Umbraco.Tests.Models.Mapping return new MediaTypeSave { Alias = "test", - AllowAsRoot = true, + AllowAsRoot = true, AllowedContentTypes = new[] { 666, 667 }, Description = "hello world", Icon = "tree-icon", @@ -1253,11 +1215,11 @@ namespace Umbraco.Tests.Models.Mapping Id = 987, Name = "Tab 1", SortOrder = 0, - Inherited = false, + Inherited = false, Properties = new[] { new PropertyTypeBasic - { + { Alias = "property1", Description = "this is property 1", Inherited = false, @@ -1277,11 +1239,11 @@ namespace Umbraco.Tests.Models.Mapping Id = 894, Name = "Tab 2", SortOrder = 0, - Inherited = true, + Inherited = true, Properties = new[] { new PropertyTypeBasic - { + { Alias = "parentProperty", Description = "this is a property from the parent", Inherited = true, @@ -1290,12 +1252,12 @@ namespace Umbraco.Tests.Models.Mapping { Mandatory = false, Pattern = "" - }, + }, SortOrder = 0, DataTypeId = 555 } } - + } } diff --git a/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs b/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs index 47ef097085..78099dad9b 100644 --- a/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs +++ b/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs @@ -19,6 +19,7 @@ using Umbraco.Web.Dictionary; using Umbraco.Web.Models.ContentEditing; using Umbraco.Web.Models.Mapping; using umbraco; +using Umbraco.Web; namespace Umbraco.Tests.Models.Mapping { @@ -240,7 +241,7 @@ namespace Umbraco.Tests.Models.Mapping Assert.AreEqual(p.PropertyType.Description, pDto.Description); Assert.AreEqual(p.PropertyType.Name, pDto.Label); Assert.AreEqual(ApplicationContext.Services.DataTypeService.GetDataTypeDefinitionById(p.PropertyType.DataTypeDefinitionId), pDto.DataType); - Assert.AreEqual(PropertyEditorResolver.Current.GetByAlias(p.PropertyType.PropertyEditorAlias), pDto.PropertyEditor); + Assert.AreEqual(Current.PropertyEditors[p.PropertyType.PropertyEditorAlias], pDto.PropertyEditor); } private void AssertContentItem(ContentItemBasic result, T content) diff --git a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs index 45ff501a03..68a8cdeb24 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs @@ -79,6 +79,14 @@ namespace Umbraco.Tests.TestHelpers Container.Register(); Container.Register(factory => _facadeService); + + var manifestBuilder = new ManifestBuilder( + new NullCacheProvider(), + new ManifestParser(Logger, new DirectoryInfo(IOHelper.MapPath("~/App_Plugins")), new NullCacheProvider())); + Container.Register(_ => manifestBuilder); + + PropertyEditorCollectionBuilder.Register(Container) + .AddProducer(() => PluginManager.Current.ResolvePropertyEditors()); } private CacheHelper _disabledCacheHelper; @@ -254,13 +262,6 @@ namespace Umbraco.Tests.TestHelpers /// protected override void FreezeResolution() { - PropertyEditorResolver.Current = new PropertyEditorResolver( - Container, Logger, - () => PluginManager.Current.ResolvePropertyEditors(), - new ManifestBuilder( - new NullCacheProvider(), - new ManifestParser(Logger, new DirectoryInfo(IOHelper.MapPath("~/App_Plugins")), new NullCacheProvider()))); - if (PropertyValueConvertersResolver.HasCurrent == false) PropertyValueConvertersResolver.Current = new PropertyValueConvertersResolver(Container, Logger); diff --git a/src/Umbraco.Web/Current.cs b/src/Umbraco.Web/Current.cs index c0d8a1979a..5dce900199 100644 --- a/src/Umbraco.Web/Current.cs +++ b/src/Umbraco.Web/Current.cs @@ -3,6 +3,7 @@ using LightInject; using Umbraco.Core.Cache; using Umbraco.Core.Events; using Umbraco.Core.Persistence.Migrations; +using Umbraco.Core.PropertyEditors; using Umbraco.Core.Strings; using Umbraco.Web.HealthCheck; using Umbraco.Web.PublishedCache; @@ -144,6 +145,9 @@ namespace Umbraco.Web public static CacheRefresherCollection CacheRefreshers => Container.GetInstance(); + public static PropertyEditorCollection PropertyEditors + => Container.GetInstance(); + #endregion } } diff --git a/src/Umbraco.Web/Editors/ContentTypeController.cs b/src/Umbraco.Web/Editors/ContentTypeController.cs index 70f8ca249c..d0e214a512 100644 --- a/src/Umbraco.Web/Editors/ContentTypeController.cs +++ b/src/Umbraco.Web/Editors/ContentTypeController.cs @@ -143,7 +143,7 @@ namespace Umbraco.Web.Editors } var preVals = UmbracoContext.Current.Application.Services.DataTypeService.GetPreValuesCollectionByDataTypeId(id); - var editor = PropertyEditorResolver.Current.GetByAlias(dataTypeDiff.PropertyEditorAlias); + var editor = Current.PropertyEditors[dataTypeDiff.PropertyEditorAlias]; return new ContentPropertyDisplay() { diff --git a/src/Umbraco.Web/Editors/DataTypeController.cs b/src/Umbraco.Web/Editors/DataTypeController.cs index 9df63d1e10..892d7c2112 100644 --- a/src/Umbraco.Web/Editors/DataTypeController.cs +++ b/src/Umbraco.Web/Editors/DataTypeController.cs @@ -131,7 +131,7 @@ namespace Umbraco.Web.Editors /// public IEnumerable GetPreValues(string editorAlias, int dataTypeId = -1) { - var propEd = PropertyEditorResolver.Current.GetByAlias(editorAlias); + var propEd = Current.PropertyEditors[editorAlias]; if (propEd == null) { throw new InvalidOperationException("Could not find property editor with alias " + editorAlias); @@ -302,7 +302,7 @@ namespace Umbraco.Web.Editors .Select(Mapper.Map) .ToArray(); - var propertyEditors = PropertyEditorResolver.Current.PropertyEditors.ToArray(); + var propertyEditors = Current.PropertyEditors.ToArray(); foreach (var dataType in dataTypes) { @@ -332,7 +332,7 @@ namespace Umbraco.Web.Editors { var datatypes = new List(); - var propertyEditors = PropertyEditorResolver.Current.PropertyEditors; + var propertyEditors = Current.PropertyEditors; foreach (var propertyEditor in propertyEditors) { var hasPrevalues = propertyEditor.PreValueEditor.Fields.Any(); @@ -361,7 +361,7 @@ namespace Umbraco.Web.Editors Constants.Applications.Settings, Constants.Applications.Developer)] public IEnumerable GetAllPropertyEditors() { - return PropertyEditorResolver.Current.PropertyEditors + return Current.PropertyEditors .OrderBy(x => x.Name) .Select(Mapper.Map); } diff --git a/src/Umbraco.Web/Editors/DataTypeValidateAttribute.cs b/src/Umbraco.Web/Editors/DataTypeValidateAttribute.cs index 7f513b35c7..a1a1991f52 100644 --- a/src/Umbraco.Web/Editors/DataTypeValidateAttribute.cs +++ b/src/Umbraco.Web/Editors/DataTypeValidateAttribute.cs @@ -46,7 +46,7 @@ namespace Umbraco.Web.Editors dataType.Alias = dataType.Name.CleanForXss('[', ']', '(', ')', ':'); //Validate that the property editor exists - var propertyEditor = PropertyEditorResolver.Current.GetByAlias(dataType.SelectedEditor); + var propertyEditor = Current.PropertyEditors[dataType.SelectedEditor]; if (propertyEditor == null) { var message = string.Format("Property editor with id: {0} was not found", dataType.SelectedEditor); diff --git a/src/Umbraco.Web/Install/InstallSteps/MajorVersion7UpgradeReport.cs b/src/Umbraco.Web/Install/InstallSteps/MajorVersion7UpgradeReport.cs index 74c3c683c4..45e5fc4846 100644 --- a/src/Umbraco.Web/Install/InstallSteps/MajorVersion7UpgradeReport.cs +++ b/src/Umbraco.Web/Install/InstallSteps/MajorVersion7UpgradeReport.cs @@ -104,7 +104,7 @@ namespace Umbraco.Web.Install.InstallSteps if (alias != null) { //check that the new property editor exists with that alias - var editor = PropertyEditorResolver.Current.GetByAlias(alias); + var editor = Current.PropertyEditors[alias]; if (editor == null) { errorReport.Add(string.Format("Property Editor with ID '{0}' (assigned to Data Type '{1}') has a valid GUID -> Alias map but no property editor was found. It will be replaced with a Readonly/Label property editor.", item.controlId, item.text)); diff --git a/src/Umbraco.Web/Models/Mapping/AvailablePropertyEditorsResolver.cs b/src/Umbraco.Web/Models/Mapping/AvailablePropertyEditorsResolver.cs index 624c641d3b..4f69187e7d 100644 --- a/src/Umbraco.Web/Models/Mapping/AvailablePropertyEditorsResolver.cs +++ b/src/Umbraco.Web/Models/Mapping/AvailablePropertyEditorsResolver.cs @@ -1,9 +1,7 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using AutoMapper; using Umbraco.Core.Models; -using Umbraco.Core.PropertyEditors; using Umbraco.Web.Models.ContentEditing; namespace Umbraco.Web.Models.Mapping @@ -12,7 +10,7 @@ namespace Umbraco.Web.Models.Mapping { protected override IEnumerable ResolveCore(IDataTypeDefinition source) { - return PropertyEditorResolver.Current.PropertyEditors + return Current.PropertyEditors .OrderBy(x => x.Name) .Select(Mapper.Map); } diff --git a/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs b/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs index d8dd701731..b5ef19c315 100644 --- a/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/ContentModelMapper.cs @@ -172,7 +172,7 @@ namespace Umbraco.Web.Models.Mapping Alias = string.Format("{0}doctype", Constants.PropertyEditors.InternalGenericPropertiesPrefix), Label = localizedText.Localize("content/documentType"), Value = localizedText.UmbracoDictionaryTranslate(display.ContentTypeName), - View = PropertyEditorResolver.Current.GetByAlias(Constants.PropertyEditors.NoEditAlias).ValueEditor.View + View = Current.PropertyEditors[Constants.PropertyEditors.NoEditAlias].ValueEditor.View }, new ContentPropertyDisplay { @@ -180,7 +180,7 @@ namespace Umbraco.Web.Models.Mapping Label = localizedText.Localize("content/releaseDate"), Value = display.ReleaseDate.HasValue ? display.ReleaseDate.Value.ToIsoString() : null, //Not editible for people without publish permission (U4-287) - View = display.AllowedActions.Contains(ActionPublish.Instance.Letter) ? "datepicker" : PropertyEditorResolver.Current.GetByAlias(Constants.PropertyEditors.NoEditAlias).ValueEditor.View, + View = display.AllowedActions.Contains(ActionPublish.Instance.Letter) ? "datepicker" : Current.PropertyEditors[Constants.PropertyEditors.NoEditAlias].ValueEditor.View, Config = new Dictionary { {"offsetTime", "1"} @@ -193,7 +193,7 @@ namespace Umbraco.Web.Models.Mapping Label = localizedText.Localize("content/unpublishDate"), Value = display.ExpireDate.HasValue ? display.ExpireDate.Value.ToIsoString() : null, //Not editible for people without publish permission (U4-287) - View = display.AllowedActions.Contains(ActionPublish.Instance.Letter) ? "datepicker" : PropertyEditorResolver.Current.GetByAlias(Constants.PropertyEditors.NoEditAlias).ValueEditor.View, + View = display.AllowedActions.Contains(ActionPublish.Instance.Letter) ? "datepicker" : Current.PropertyEditors[Constants.PropertyEditors.NoEditAlias].ValueEditor.View, Config = new Dictionary { {"offsetTime", "1"} diff --git a/src/Umbraco.Web/Models/Mapping/ContentPropertyBasicConverter.cs b/src/Umbraco.Web/Models/Mapping/ContentPropertyBasicConverter.cs index f61d9adf77..d944c48f48 100644 --- a/src/Umbraco.Web/Models/Mapping/ContentPropertyBasicConverter.cs +++ b/src/Umbraco.Web/Models/Mapping/ContentPropertyBasicConverter.cs @@ -30,14 +30,14 @@ namespace Umbraco.Web.Models.Mapping /// protected override T ConvertCore(Property property) { - var editor = PropertyEditorResolver.Current.GetByAlias(property.PropertyType.PropertyEditorAlias); + var editor = Current.PropertyEditors[property.PropertyType.PropertyEditorAlias]; if (editor == null) { LogHelper.Error>( "No property editor found, converting to a Label", new NullReferenceException("The property editor with alias " + property.PropertyType.PropertyEditorAlias + " does not exist")); - editor = PropertyEditorResolver.Current.GetByAlias(Constants.PropertyEditors.NoEditAlias); + editor = Current.PropertyEditors[Constants.PropertyEditors.NoEditAlias]; } var result = new T { diff --git a/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapper.cs b/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapper.cs index 4ef1991b40..46d5dc1ae3 100644 --- a/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapper.cs @@ -18,18 +18,18 @@ namespace Umbraco.Web.Models.Mapping /// internal class ContentTypeModelMapper : ModelMapperConfiguration { - private readonly Lazy _propertyEditorResolver; + private readonly PropertyEditorCollection _propertyEditors; //default ctor public ContentTypeModelMapper() { - _propertyEditorResolver = new Lazy(() => PropertyEditorResolver.Current); + _propertyEditors = Current.PropertyEditors; } //ctor can be used for testing - public ContentTypeModelMapper(Lazy propertyEditorResolver) + public ContentTypeModelMapper(PropertyEditorCollection propertyEditors) { - _propertyEditorResolver = propertyEditorResolver; + _propertyEditors = propertyEditors; } public override void ConfigureMappings(IMapperConfiguration config, ApplicationContext applicationContext) @@ -102,7 +102,7 @@ namespace Umbraco.Web.Models.Mapping config.CreateMap() //map base logic - .MapBaseContentTypeEntityToDisplay(applicationContext, _propertyEditorResolver) + .MapBaseContentTypeEntityToDisplay(applicationContext, _propertyEditors) .AfterMap((memberType, display) => { //map the MemberCanEditProperty,MemberCanViewProperty @@ -120,7 +120,7 @@ namespace Umbraco.Web.Models.Mapping config.CreateMap() //map base logic - .MapBaseContentTypeEntityToDisplay(applicationContext, _propertyEditorResolver) + .MapBaseContentTypeEntityToDisplay(applicationContext, _propertyEditors) .AfterMap((source, dest) => { //default listview @@ -136,7 +136,7 @@ namespace Umbraco.Web.Models.Mapping config.CreateMap() //map base logic - .MapBaseContentTypeEntityToDisplay(applicationContext, _propertyEditorResolver) + .MapBaseContentTypeEntityToDisplay(applicationContext, _propertyEditors) .ForMember(dto => dto.AllowedTemplates, expression => expression.Ignore()) .ForMember(dto => dto.DefaultTemplate, expression => expression.Ignore()) .ForMember(display => display.Notifications, expression => expression.Ignore()) diff --git a/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapperExtensions.cs b/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapperExtensions.cs index f86f813385..66ebee02ec 100644 --- a/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapperExtensions.cs +++ b/src/Umbraco.Web/Models/Mapping/ContentTypeModelMapperExtensions.cs @@ -120,7 +120,7 @@ namespace Umbraco.Web.Models.Mapping } public static IMappingExpression MapBaseContentTypeEntityToDisplay( - this IMappingExpression mapping, ApplicationContext applicationContext, Lazy propertyEditorResolver) + this IMappingExpression mapping, ApplicationContext applicationContext, PropertyEditorCollection propertyEditors) where TSource : IContentTypeComposition where TDestination : ContentTypeCompositionDisplay where TPropertyTypeDisplay : PropertyTypeDisplay, new() @@ -147,7 +147,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember( dto => dto.Groups, - expression => expression.ResolveUsing(new PropertyTypeGroupResolver(applicationContext, propertyEditorResolver))); + expression => expression.ResolveUsing(new PropertyTypeGroupResolver(applicationContext, propertyEditors))); } /// diff --git a/src/Umbraco.Web/Models/Mapping/DataTypeModelMapper.cs b/src/Umbraco.Web/Models/Mapping/DataTypeModelMapper.cs index aa17043db8..12d10858d0 100644 --- a/src/Umbraco.Web/Models/Mapping/DataTypeModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/DataTypeModelMapper.cs @@ -51,7 +51,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(x => x.IsSystemDataType, expression => expression.MapFrom(definition => systemIds.Contains(definition.Id))) .AfterMap((def, basic) => { - var editor = PropertyEditorResolver.Current.GetByAlias(def.PropertyEditorAlias); + var editor = Current.PropertyEditors[def.PropertyEditorAlias]; if (editor != null) { basic.Alias = editor.Alias; @@ -74,7 +74,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(x => x.IsSystemDataType, expression => expression.MapFrom(definition => systemIds.Contains(definition.Id))) .AfterMap((def, basic) => { - var editor = PropertyEditorResolver.Current.GetByAlias(def.PropertyEditorAlias); + var editor = Current.PropertyEditors[def.PropertyEditorAlias]; if (editor != null) { basic.Group = editor.Group; diff --git a/src/Umbraco.Web/Models/Mapping/DatabaseTypeResolver.cs b/src/Umbraco.Web/Models/Mapping/DatabaseTypeResolver.cs index cdfbb97960..57be0fc23f 100644 --- a/src/Umbraco.Web/Models/Mapping/DatabaseTypeResolver.cs +++ b/src/Umbraco.Web/Models/Mapping/DatabaseTypeResolver.cs @@ -13,7 +13,7 @@ namespace Umbraco.Web.Models.Mapping { protected override DataTypeDatabaseType ResolveCore(DataTypeSave source) { - var propertyEditor = PropertyEditorResolver.Current.GetByAlias(source.SelectedEditor); + var propertyEditor = Current.PropertyEditors[source.SelectedEditor]; if (propertyEditor == null) { throw new InvalidOperationException("Could not find property editor with id " + source.SelectedEditor); diff --git a/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs index eb2028bcb4..afadf90902 100644 --- a/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/MediaModelMapper.cs @@ -137,7 +137,7 @@ namespace Umbraco.Web.Models.Mapping Alias = string.Format("{0}doctype", Constants.PropertyEditors.InternalGenericPropertiesPrefix), Label = localizedText.Localize("content/mediatype"), Value = localizedText.UmbracoDictionaryTranslate(display.ContentTypeName), - View = PropertyEditorResolver.Current.GetByAlias(Constants.PropertyEditors.NoEditAlias).ValueEditor.View + View = Current.PropertyEditors[Constants.PropertyEditors.NoEditAlias].ValueEditor.View } }; diff --git a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs index aa8cd16d53..febcc997e5 100644 --- a/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/MemberModelMapper.cs @@ -197,7 +197,7 @@ namespace Umbraco.Web.Models.Mapping Alias = string.Format("{0}doctype", Constants.PropertyEditors.InternalGenericPropertiesPrefix), Label = localizedText.Localize("content/membertype"), Value = localizedText.UmbracoDictionaryTranslate(display.ContentTypeName), - View = PropertyEditorResolver.Current.GetByAlias(Constants.PropertyEditors.NoEditAlias).ValueEditor.View + View = Current.PropertyEditors[Constants.PropertyEditors.NoEditAlias].ValueEditor.View }, GetLoginProperty(memberService, member, display, localizedText), new ContentPropertyDisplay diff --git a/src/Umbraco.Web/Models/Mapping/PreValueDisplayResolver.cs b/src/Umbraco.Web/Models/Mapping/PreValueDisplayResolver.cs index 295a5df63d..9b50daaf55 100644 --- a/src/Umbraco.Web/Models/Mapping/PreValueDisplayResolver.cs +++ b/src/Umbraco.Web/Models/Mapping/PreValueDisplayResolver.cs @@ -47,7 +47,7 @@ namespace Umbraco.Web.Models.Mapping PropertyEditor propEd = null; if (source.PropertyEditorAlias.IsNullOrWhiteSpace() == false) { - propEd = PropertyEditorResolver.Current.GetByAlias(source.PropertyEditorAlias); + propEd = Current.PropertyEditors[source.PropertyEditorAlias]; if (propEd == null) { throw new InvalidOperationException("Could not find property editor with alias " + source.PropertyEditorAlias); diff --git a/src/Umbraco.Web/Models/Mapping/PropertyTypeGroupResolver.cs b/src/Umbraco.Web/Models/Mapping/PropertyTypeGroupResolver.cs index a2273b07b2..e7c53a9015 100644 --- a/src/Umbraco.Web/Models/Mapping/PropertyTypeGroupResolver.cs +++ b/src/Umbraco.Web/Models/Mapping/PropertyTypeGroupResolver.cs @@ -13,12 +13,12 @@ namespace Umbraco.Web.Models.Mapping where TPropertyType : PropertyTypeDisplay, new() { private readonly ApplicationContext _applicationContext; - private readonly Lazy _propertyEditorResolver; + private readonly PropertyEditorCollection _propertyEditors; - public PropertyTypeGroupResolver(ApplicationContext applicationContext, Lazy propertyEditorResolver) + public PropertyTypeGroupResolver(ApplicationContext applicationContext, PropertyEditorCollection propertyEditors) { _applicationContext = applicationContext; - _propertyEditorResolver = propertyEditorResolver; + _propertyEditors = propertyEditors; } /// @@ -197,7 +197,7 @@ namespace Umbraco.Web.Models.Mapping foreach (var p in properties.Where(x => x.DataTypeDefinitionId != 0).OrderBy(x => x.SortOrder)) { - var propertyEditor = _propertyEditorResolver.Value.GetByAlias(p.PropertyEditorAlias); + var propertyEditor = _propertyEditors[p.PropertyEditorAlias]; var preValues = _applicationContext.Services.DataTypeService.GetPreValuesCollectionByDataTypeId(p.DataTypeDefinitionId); if (propertyEditor == null) diff --git a/src/Umbraco.Web/Models/Mapping/TabsAndPropertiesResolver.cs b/src/Umbraco.Web/Models/Mapping/TabsAndPropertiesResolver.cs index 3273c6b396..a26ddc0522 100644 --- a/src/Umbraco.Web/Models/Mapping/TabsAndPropertiesResolver.cs +++ b/src/Umbraco.Web/Models/Mapping/TabsAndPropertiesResolver.cs @@ -28,7 +28,7 @@ namespace Umbraco.Web.Models.Mapping public TabsAndPropertiesResolver(ILocalizedTextService localizedTextService, IEnumerable ignoreProperties) : this(localizedTextService) - { + { if (ignoreProperties == null) throw new ArgumentNullException("ignoreProperties"); IgnoreProperties = ignoreProperties; } @@ -40,11 +40,11 @@ namespace Umbraco.Web.Models.Mapping /// /// /// - /// Any additional custom properties to assign to the generic properties tab. + /// Any additional custom properties to assign to the generic properties tab. /// /// /// - /// The generic properties tab is mapped during AfterMap and is responsible for + /// The generic properties tab is mapped during AfterMap and is responsible for /// setting up the properties such as Created date, updated date, template selected, etc... /// public static void MapGenericProperties( @@ -60,7 +60,7 @@ namespace Umbraco.Web.Models.Mapping //store the current props to append to the newly inserted ones var currProps = genericProps.Properties.ToArray(); - var labelEditor = PropertyEditorResolver.Current.GetByAlias(Constants.PropertyEditors.NoEditAlias).ValueEditor.View; + var labelEditor = Current.PropertyEditors[Constants.PropertyEditors.NoEditAlias].ValueEditor.View; var contentProps = new List { @@ -133,7 +133,7 @@ namespace Umbraco.Web.Models.Mapping { case "content": dtdId = Constants.DataTypes.DefaultContentListView; - + break; case "media": dtdId = Constants.DataTypes.DefaultMediaListView; @@ -146,7 +146,7 @@ namespace Umbraco.Web.Models.Mapping } //first try to get the custom one if there is one - var dt = dataTypeService.GetDataTypeDefinitionByName(customDtdName) + var dt = dataTypeService.GetDataTypeDefinitionByName(customDtdName) ?? dataTypeService.GetDataTypeDefinitionById(dtdId); if (dt == null) @@ -156,7 +156,7 @@ namespace Umbraco.Web.Models.Mapping var preVals = dataTypeService.GetPreValuesCollectionByDataTypeId(dt.Id); - var editor = PropertyEditorResolver.Current.GetByAlias(dt.PropertyEditorAlias); + var editor = Current.PropertyEditors[dt.PropertyEditorAlias]; if (editor == null) { throw new NullReferenceException("The property editor with alias " + dt.PropertyEditorAlias + " does not exist"); @@ -187,9 +187,9 @@ namespace Umbraco.Web.Models.Mapping SetChildItemsTabPosition(display, listViewConfig, listViewTab); } - private static void SetChildItemsTabPosition(TabbedContentItem display, + private static void SetChildItemsTabPosition(TabbedContentItem display, IDictionary listViewConfig, - Tab listViewTab) + Tab listViewTab) where TPersisted : IContentBase { // Find position of tab from config @@ -224,13 +224,13 @@ namespace Umbraco.Web.Models.Mapping // add the tabs, for properties that belong to a tab // need to aggregate the tabs, as content.PropertyGroups contains all the composition tabs, - // and there might be duplicates (content does not work like contentType and there is no + // and there might be duplicates (content does not work like contentType and there is no // content.CompositionPropertyGroups). var groupsGroupsByName = content.PropertyGroups.OrderBy(x => x.SortOrder).GroupBy(x => x.Name); foreach (var groupsByName in groupsGroupsByName) { var properties = new List(); - + // merge properties for groups with the same name foreach (var group in groupsByName) { diff --git a/src/Umbraco.Web/Models/PublishedProperty.cs b/src/Umbraco.Web/Models/PublishedProperty.cs index f3a4cea493..916011239a 100644 --- a/src/Umbraco.Web/Models/PublishedProperty.cs +++ b/src/Umbraco.Web/Models/PublishedProperty.cs @@ -23,7 +23,7 @@ namespace Umbraco.Web.Models IEnumerable propertyTypes, IEnumerable properties, Func map) { - var propertyEditorResolver = PropertyEditorResolver.Current; + var propertyEditors = Current.PropertyEditors; var dataTypeService = ApplicationContext.Current.Services.DataTypeService; return propertyTypes.Select(x => @@ -32,7 +32,7 @@ namespace Umbraco.Web.Models var v = p == null || p.Value == null ? null : p.Value; if (v != null) { - var e = propertyEditorResolver.GetByAlias(x.PropertyEditorAlias); + var e = propertyEditors[x.PropertyEditorAlias]; // We are converting to string, even for database values which are integer or // DateTime, which is not optimum. Doing differently would require that we have a way to tell diff --git a/src/Umbraco.Web/UI/JavaScript/AssetInitialization.cs b/src/Umbraco.Web/UI/JavaScript/AssetInitialization.cs index 26f933f734..342cf993b0 100644 --- a/src/Umbraco.Web/UI/JavaScript/AssetInitialization.cs +++ b/src/Umbraco.Web/UI/JavaScript/AssetInitialization.cs @@ -24,11 +24,11 @@ namespace Umbraco.Web.UI.JavaScript { if (httpContext == null) throw new ArgumentNullException("httpContext"); var cdfAttributes = - PropertyEditorResolver.Current.PropertyEditors - .SelectMany(x => x.GetType().GetCustomAttributes(false)) - .Where(x => x.AssetType == cdfType) - .Select(x => x.DependencyFile) - .ToList(); + Current.PropertyEditors + .SelectMany(x => x.GetType().GetCustomAttributes(false)) + .Where(x => x.AssetType == cdfType) + .Select(x => x.DependencyFile) + .ToList(); string jsOut; string cssOut;