diff --git a/src/Umbraco.Web/Current.cs b/src/Umbraco.Web/Current.cs index 3271f755bf..bb7a4c3b97 100644 --- a/src/Umbraco.Web/Current.cs +++ b/src/Umbraco.Web/Current.cs @@ -9,6 +9,7 @@ using Umbraco.Core.Strings; using Umbraco.Core._Legacy.PackageActions; using Umbraco.Web.Editors; using Umbraco.Web.HealthCheck; +using Umbraco.Web.Media; using Umbraco.Web.Mvc; using Umbraco.Web.PublishedCache; using Umbraco.Web.Routing; @@ -156,6 +157,9 @@ namespace Umbraco.Web public static FilteredControllerFactoryCollection FilteredControllerFactories => Container.GetInstance(); + internal static ImageUrlProviderCollection ImageUrlProviders + => Container.GetInstance(); + #endregion #region Core Getters diff --git a/src/Umbraco.Web/Media/ImageUrl.cs b/src/Umbraco.Web/Media/ImageUrl.cs index c0271167aa..3b7ee2b884 100644 --- a/src/Umbraco.Web/Media/ImageUrl.cs +++ b/src/Umbraco.Web/Media/ImageUrl.cs @@ -82,7 +82,7 @@ namespace Umbraco.Web.Media private static IImageUrlProvider GetProvider(string provider) { - return ImageUrlProviderResolver.Current.GetProvider(provider); + return Current.ImageUrlProviders[provider]; } private static object GetContentFromCache(int nodeIdInt, string field) diff --git a/src/Umbraco.Web/Media/ImageUrlProviderCollection.cs b/src/Umbraco.Web/Media/ImageUrlProviderCollection.cs new file mode 100644 index 0000000000..b4391dc5f8 --- /dev/null +++ b/src/Umbraco.Web/Media/ImageUrlProviderCollection.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Umbraco.Core; +using Umbraco.Core.DependencyInjection; +using Umbraco.Core.Media; +using Umbraco.Web.Media.ImageUrlProviders; + +namespace Umbraco.Web.Media +{ + internal class ImageUrlProviderCollection : BuilderCollectionBase + { + public ImageUrlProviderCollection(IEnumerable items) + : base(items) + { } + + public IImageUrlProvider this[string name] + { + get + { + if (string.IsNullOrWhiteSpace(name)) name = ImageUrlProvider.DefaultName; + var provider = this.FirstOrDefault(x => x.Name.InvariantEquals(name)); + if (provider == null) throw new InvalidOperationException($"No provider exists with name \"{name}\"."); + return provider; + } + } + } +} diff --git a/src/Umbraco.Web/Media/ImageUrlProviderCollectionBuilder.cs b/src/Umbraco.Web/Media/ImageUrlProviderCollectionBuilder.cs new file mode 100644 index 0000000000..d63045ed62 --- /dev/null +++ b/src/Umbraco.Web/Media/ImageUrlProviderCollectionBuilder.cs @@ -0,0 +1,14 @@ +using LightInject; +using Umbraco.Core.DependencyInjection; +using Umbraco.Core.Media; + +namespace Umbraco.Web.Media +{ + internal class ImageUrlProviderCollectionBuilder : OrderedCollectionBuilderBase + { + public ImageUrlProviderCollectionBuilder(IServiceContainer container) : base(container) + {} + + protected override ImageUrlProviderCollectionBuilder This => this; + } +} diff --git a/src/Umbraco.Web/Media/ImageUrlProviderResolver.cs b/src/Umbraco.Web/Media/ImageUrlProviderResolver.cs deleted file mode 100644 index c52d937d8f..0000000000 --- a/src/Umbraco.Web/Media/ImageUrlProviderResolver.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Umbraco.Core.Logging; -using Umbraco.Core.Media; -using Umbraco.Core.ObjectResolution; -using Umbraco.Web.Media.ImageUrlProviders; - -namespace Umbraco.Web.Media -{ - internal sealed class ImageUrlProviderResolver : ManyObjectsResolverBase - { - internal ImageUrlProviderResolver(IServiceProvider serviceProvider, ILogger logger, IEnumerable value) - : base(serviceProvider, logger, value) - { - } - - public IImageUrlProvider GetProvider(string provider) - { - return string.IsNullOrEmpty(provider) ? - Values.First(v => v.Name.Equals(ImageUrlProvider.DefaultName, StringComparison.InvariantCultureIgnoreCase)) : - Values.First(v => v.Name.Equals(provider, StringComparison.InvariantCultureIgnoreCase)); - } - } -} \ No newline at end of file diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index c56812457d..778d483cef 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -210,6 +210,8 @@ + + @@ -825,7 +827,6 @@ - diff --git a/src/Umbraco.Web/WebBootManager.cs b/src/Umbraco.Web/WebBootManager.cs index 95f263ad94..8971c929c5 100644 --- a/src/Umbraco.Web/WebBootManager.cs +++ b/src/Umbraco.Web/WebBootManager.cs @@ -529,9 +529,8 @@ namespace Umbraco.Web ThumbnailProviderCollectionBuilder.Register(Container) .Add(PluginManager.ResolveThumbnailProviders()); - ImageUrlProviderResolver.Current = new ImageUrlProviderResolver( - ServiceProvider, ProfilingLogger.Logger, - PluginManager.ResolveImageUrlProviders()); + ImageUrlProviderCollectionBuilder.Register(Container) + .Append(PluginManager.ResolveImageUrlProviders()); CultureDictionaryFactoryResolver.Current = new CultureDictionaryFactoryResolver(Container); Container.Register();