Break cycle by introducing DataEditorWithMediaPathCollection
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
/// </remarks>
|
||||
public interface IDataEditorWithMediaPath
|
||||
{
|
||||
string Alias { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Returns the media path for the value stored for a property
|
||||
/// </summary>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
using Umbraco.Core.Composing;
|
||||
|
||||
namespace Umbraco.Core.PropertyEditors
|
||||
{
|
||||
public class DataEditorWithMediaPathCollectionBuilder : LazyCollectionBuilderBase<DataEditorWithMediaPathCollectionBuilder, DataEditorWithMediaPathCollection, IDataEditorWithMediaPath>
|
||||
{
|
||||
protected override DataEditorWithMediaPathCollectionBuilder This => this;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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>();
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user