Break cycle by introducing DataEditorWithMediaPathCollection

This commit is contained in:
Bjarke Berg
2020-02-18 13:56:31 +01:00
parent e6e3fc39fb
commit 5a61b27366
7 changed files with 55 additions and 8 deletions

View File

@@ -1,4 +1,5 @@
using Umbraco.Core.Composing;
using Umbraco.Core.PropertyEditors;
using Umbraco.Web.Dashboards;
namespace Umbraco.Core
@@ -22,6 +23,15 @@ namespace Umbraco.Core
public static DashboardCollectionBuilder Dashboards(this Composition composition)
=> composition.WithCollectionBuilder<DashboardCollectionBuilder>();
/// <summary>
/// Gets the content finders collection builder.
/// </summary>
/// <param name="composition">The composition.</param>
/// <returns></returns>
public static DataEditorWithMediaPathCollectionBuilder DataEditorsWithMediaPath(this Composition composition)
=> composition.WithCollectionBuilder<DataEditorWithMediaPathCollectionBuilder>();
#endregion
}
}

View File

@@ -9,6 +9,8 @@
/// </remarks>
public interface IDataEditorWithMediaPath
{
string Alias { get; }
/// <summary>
/// Returns the media path for the value stored for a property
/// </summary>

View File

@@ -0,0 +1,21 @@
using System.Collections.Generic;
using System.Linq;
using Umbraco.Core.Composing;
namespace Umbraco.Core.PropertyEditors
{
public class DataEditorWithMediaPathCollection : BuilderCollectionBase<IDataEditorWithMediaPath>
{
public DataEditorWithMediaPathCollection(IEnumerable<IDataEditorWithMediaPath> items) : base(items)
{
}
public bool TryGet(string alias, out IDataEditorWithMediaPath editor)
{
editor = this.FirstOrDefault(x => x.Alias == alias);
return editor != null;
}
}
}

View File

@@ -0,0 +1,9 @@
using Umbraco.Core.Composing;
namespace Umbraco.Core.PropertyEditors
{
public class DataEditorWithMediaPathCollectionBuilder : LazyCollectionBuilderBase<DataEditorWithMediaPathCollectionBuilder, DataEditorWithMediaPathCollection, IDataEditorWithMediaPath>
{
protected override DataEditorWithMediaPathCollectionBuilder This => this;
}
}

View File

@@ -10,11 +10,11 @@ namespace Umbraco.Web.Routing
public class DefaultMediaUrlProvider : IMediaUrlProvider
{
private readonly UriUtility _uriUtility;
private readonly Lazy<PropertyEditorCollection> _propertyEditors;
private readonly DataEditorWithMediaPathCollection _dataEditors;
public DefaultMediaUrlProvider(Lazy<PropertyEditorCollection> propertyEditors, UriUtility uriUtility)
public DefaultMediaUrlProvider(DataEditorWithMediaPathCollection dataEditors, UriUtility uriUtility)
{
_propertyEditors = propertyEditors ?? throw new ArgumentNullException(nameof(propertyEditors));
_dataEditors = dataEditors ?? throw new ArgumentNullException(nameof(dataEditors));
_uriUtility = uriUtility;
}
@@ -34,8 +34,7 @@ namespace Umbraco.Web.Routing
var propType = prop.PropertyType;
string path = null;
if (_propertyEditors.Value.TryGet(propType.EditorAlias, out var editor)
&& editor is IDataEditorWithMediaPath dataEditor)
if (_dataEditors.TryGet(propType.EditorAlias, out var dataEditor))
{
path = dataEditor.GetMediaPath(value);
}

View File

@@ -24,6 +24,7 @@ using Umbraco.Core.Sync;
using Umbraco.Web.Models.PublishedContent;
using Umbraco.Web.PublishedCache;
using Umbraco.Web;
using Umbraco.Web.PropertyEditors;
using Umbraco.Web.Services;
using IntegerValidator = Umbraco.Core.PropertyEditors.Validators.IntegerValidator;
@@ -79,6 +80,11 @@ namespace Umbraco.Core.Runtime
// properties and parameters derive from data editors
composition.DataEditors()
.Add(() => composition.TypeLoader.GetDataEditors());
composition.DataEditorsWithMediaPath()
.Add<FileUploadPropertyEditor>()
.Add<ImageCropperPropertyEditor>();
composition.RegisterUnique<PropertyEditorCollection>();
composition.RegisterUnique<ParameterEditorCollection>();

View File

@@ -38,12 +38,12 @@ namespace Umbraco.Tests.Routing
var dataTypeService = Mock.Of<IDataTypeService>();
var umbracoSettingsSection = TestObjects.GetUmbracoSettings();
var propertyEditors = new PropertyEditorCollection(new DataEditorCollection(new IDataEditor[]
var propertyEditors = new DataEditorWithMediaPathCollection(new IDataEditorWithMediaPath[]
{
new FileUploadPropertyEditor(logger, mediaFileSystemMock, contentSection, dataTypeService, LocalizationService, LocalizedTextService, ShortStringHelper, umbracoSettingsSection),
new ImageCropperPropertyEditor(logger, mediaFileSystemMock, contentSection, dataTypeService, LocalizationService, IOHelper, ShortStringHelper, LocalizedTextService, umbracoSettingsSection),
}));
_mediaUrlProvider = new DefaultMediaUrlProvider(new Lazy<PropertyEditorCollection>(() => propertyEditors), UriUtility);
});
_mediaUrlProvider = new DefaultMediaUrlProvider(propertyEditors, UriUtility);
}
public override void TearDown()