From cd432ddc57834f3f77b7e7ae30879747302ecc37 Mon Sep 17 00:00:00 2001 From: Stephan Date: Fri, 19 Aug 2016 15:14:14 +0200 Subject: [PATCH] Resvolution - SurfaceControllerResolver --- .../Routing/RenderRouteHandlerTests.cs | 5 ++- src/Umbraco.Web/Current.cs | 4 +++ src/Umbraco.Web/HtmlHelperRenderExtensions.cs | 6 ++-- .../Mvc/SurfaceControllerResolver.cs | 35 ------------------- .../Mvc/SurfaceControllerTypeCollection.cs | 17 +++++++++ src/Umbraco.Web/Umbraco.Web.csproj | 2 +- src/Umbraco.Web/UrlHelperRenderExtensions.cs | 3 +- src/Umbraco.Web/WebBootManager.cs | 11 +++--- 8 files changed, 32 insertions(+), 51 deletions(-) delete mode 100644 src/Umbraco.Web/Mvc/SurfaceControllerResolver.cs create mode 100644 src/Umbraco.Web/Mvc/SurfaceControllerTypeCollection.cs diff --git a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs index 5dab95a6c9..db85b36413 100644 --- a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs +++ b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs @@ -40,9 +40,8 @@ namespace Umbraco.Tests.Routing { DefaultRenderMvcControllerResolver.Current = new DefaultRenderMvcControllerResolver(typeof(RenderMvcController)); - SurfaceControllerResolver.Current = new SurfaceControllerResolver( - new ActivatorServiceProvider(), Logger, - PluginManager.Current.ResolveSurfaceControllers()); + var surfaceControllerTypes = new SurfaceControllerTypeCollection(PluginManager.Current.ResolveSurfaceControllers()); + Container.RegisterInstance(surfaceControllerTypes); var umbracoApiControllerTypes = new UmbracoApiControllerTypeCollection(PluginManager.Current.ResolveUmbracoApiControllers()); Container.RegisterInstance(umbracoApiControllerTypes); diff --git a/src/Umbraco.Web/Current.cs b/src/Umbraco.Web/Current.cs index 42f07160b5..fff28a5caf 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.Mvc; using Umbraco.Web.PublishedCache; using Umbraco.Web.Routing; using Umbraco.Web.WebApi; @@ -149,6 +150,9 @@ namespace Umbraco.Web internal static UmbracoApiControllerTypeCollection UmbracoApiControllerTypes => Container.GetInstance(); + internal static SurfaceControllerTypeCollection SurfaceControllerTypes + => Container.GetInstance(); + #endregion #region Core Getters diff --git a/src/Umbraco.Web/HtmlHelperRenderExtensions.cs b/src/Umbraco.Web/HtmlHelperRenderExtensions.cs index 9c3f461de0..0741848827 100644 --- a/src/Umbraco.Web/HtmlHelperRenderExtensions.cs +++ b/src/Umbraco.Web/HtmlHelperRenderExtensions.cs @@ -176,8 +176,7 @@ namespace Umbraco.Web var routeVals = new RouteValueDictionary(new {area = ""}); - var surfaceController = SurfaceControllerResolver.Current.RegisteredSurfaceControllers - .SingleOrDefault(x => x == surfaceType); + var surfaceController = Current.SurfaceControllerTypes.SingleOrDefault(x => x == surfaceType); if (surfaceController == null) throw new InvalidOperationException("Could not find the surface controller of type " + surfaceType.FullName); var metaData = PluginController.GetMetadata(surfaceController); @@ -637,8 +636,7 @@ namespace Umbraco.Web var area = ""; - var surfaceController = SurfaceControllerResolver.Current.RegisteredSurfaceControllers - .SingleOrDefault(x => x == surfaceType); + var surfaceController = Current.SurfaceControllerTypes.SingleOrDefault(x => x == surfaceType); if (surfaceController == null) throw new InvalidOperationException("Could not find the surface controller of type " + surfaceType.FullName); var metaData = PluginController.GetMetadata(surfaceController); diff --git a/src/Umbraco.Web/Mvc/SurfaceControllerResolver.cs b/src/Umbraco.Web/Mvc/SurfaceControllerResolver.cs deleted file mode 100644 index 69683261bc..0000000000 --- a/src/Umbraco.Web/Mvc/SurfaceControllerResolver.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Web.Mvc; -using Umbraco.Core.Logging; -using Umbraco.Core.ObjectResolution; - -namespace Umbraco.Web.Mvc -{ - internal sealed class SurfaceControllerResolver : ManyObjectsResolverBase - { - public SurfaceControllerResolver(IServiceProvider serviceProvider, ILogger logger, IEnumerable surfaceControllers) - : base(serviceProvider, logger, surfaceControllers) - { - - } - - /// - /// Gets the surface controllers - /// - [Obsolete("This property should not be used in code, controllers are to be instantiated via MVC. To get a list of SurfaceController types use the RegisteredSurfaceControllers property.")] - public IEnumerable SurfaceControllers - { - get { return Values; } - } - - /// - /// Gets all of the surface controller types - /// - public IEnumerable RegisteredSurfaceControllers - { - get { return InstanceTypes; } - } - - } -} \ No newline at end of file diff --git a/src/Umbraco.Web/Mvc/SurfaceControllerTypeCollection.cs b/src/Umbraco.Web/Mvc/SurfaceControllerTypeCollection.cs new file mode 100644 index 0000000000..0e3e888d35 --- /dev/null +++ b/src/Umbraco.Web/Mvc/SurfaceControllerTypeCollection.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using Umbraco.Core.DependencyInjection; + +namespace Umbraco.Web.Mvc +{ + // unless we want to modify the content of the collection + // which we are not doing at the moment + // we can inherit from BuilderCollectionBase and just be enumerable + + internal class SurfaceControllerTypeCollection : BuilderCollectionBase + { + public SurfaceControllerTypeCollection(IEnumerable items) + : base(items) + { } + } +} diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index e6a5f31f0f..9574bb36b0 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -216,6 +216,7 @@ + @@ -968,7 +969,6 @@ - diff --git a/src/Umbraco.Web/UrlHelperRenderExtensions.cs b/src/Umbraco.Web/UrlHelperRenderExtensions.cs index de194cf62a..395103ba31 100644 --- a/src/Umbraco.Web/UrlHelperRenderExtensions.cs +++ b/src/Umbraco.Web/UrlHelperRenderExtensions.cs @@ -291,8 +291,7 @@ namespace Umbraco.Web var area = ""; - var surfaceController = SurfaceControllerResolver.Current.RegisteredSurfaceControllers - .SingleOrDefault(x => x == surfaceType); + var surfaceController = Current.SurfaceControllerTypes.SingleOrDefault(x => x == surfaceType); if (surfaceController == null) throw new InvalidOperationException("Could not find the surface controller of type " + surfaceType.FullName); var metaData = PluginController.GetMetadata(surfaceController); diff --git a/src/Umbraco.Web/WebBootManager.cs b/src/Umbraco.Web/WebBootManager.cs index da720e973c..73f430800b 100644 --- a/src/Umbraco.Web/WebBootManager.cs +++ b/src/Umbraco.Web/WebBootManager.cs @@ -248,9 +248,9 @@ namespace Umbraco.Web var umbracoPath = GlobalSettings.UmbracoMvcArea; //we need to find the plugin controllers and route them - var pluginControllers = - SurfaceControllerResolver.Current.RegisteredSurfaceControllers.Concat( - Current.UmbracoApiControllerTypes).ToArray(); + var pluginControllers = Current.SurfaceControllerTypes + .Concat(Current.UmbracoApiControllerTypes) + .ToArray(); //local controllers do not contain the attribute var localControllers = pluginControllers.Where(x => PluginController.GetMetadata(x).AreaName.IsNullOrWhiteSpace()); @@ -481,9 +481,8 @@ namespace Umbraco.Web ActionCollectionBuilder.Register(Container) .SetProducer(() => PluginManager.ResolveActions()); - SurfaceControllerResolver.Current = new SurfaceControllerResolver( - ServiceProvider, ProfilingLogger.Logger, - PluginManager.ResolveSurfaceControllers()); + var surfaceControllerTypes = new SurfaceControllerTypeCollection(PluginManager.ResolveSurfaceControllers()); + Container.RegisterInstance(surfaceControllerTypes); var umbracoApiControllerTypes = new UmbracoApiControllerTypeCollection(PluginManager.ResolveUmbracoApiControllers()); Container.RegisterInstance(umbracoApiControllerTypes);