diff --git a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs index db85b36413..4b4f92217b 100644 --- a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs +++ b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs @@ -38,7 +38,8 @@ namespace Umbraco.Tests.Routing protected override void FreezeResolution() { - DefaultRenderMvcControllerResolver.Current = new DefaultRenderMvcControllerResolver(typeof(RenderMvcController)); + // set the default RenderMvcController + Current.DefaultRenderMvcControllerType = typeof(RenderMvcController); // fixme WRONG! var surfaceControllerTypes = new SurfaceControllerTypeCollection(PluginManager.Current.ResolveSurfaceControllers()); Container.RegisterInstance(surfaceControllerTypes); diff --git a/src/Umbraco.Web/Current.cs b/src/Umbraco.Web/Current.cs index d43f94d55e..a76fe78414 100644 --- a/src/Umbraco.Web/Current.cs +++ b/src/Umbraco.Web/Current.cs @@ -1,5 +1,6 @@ using System; using LightInject; +using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Events; using Umbraco.Core.Macros; @@ -168,6 +169,29 @@ namespace Umbraco.Web #endregion + #region Web Constants + + // these are different - not 'resolving' anything, and nothing that could be managed + // by the container - just registering some sort of application-wide constants or + // settings - but they fit in Current nicely too + + private static Type _defaultRenderMvcControllerType; + + public static Type DefaultRenderMvcControllerType + { + get { return _defaultRenderMvcControllerType; } + set + { + if (value.Implements() == false) + throw new ArgumentException($"Type {value.FullName} does not implement {typeof (IRenderController).FullName}.", nameof(value)); + + // fixme - must lock + ensure we're not frozen? + _defaultRenderMvcControllerType = value; + } + } + + #endregion + #region Core Getters // proxy Core for convenience diff --git a/src/Umbraco.Web/Mvc/DefaultRenderMvcControllerResolver.cs b/src/Umbraco.Web/Mvc/DefaultRenderMvcControllerResolver.cs deleted file mode 100644 index e53b20440f..0000000000 --- a/src/Umbraco.Web/Mvc/DefaultRenderMvcControllerResolver.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Web.Mvc; -using Umbraco.Core; -using Umbraco.Core.ObjectResolution; -using Umbraco.Core.Plugins; - -namespace Umbraco.Web.Mvc -{ - /// - /// A resolver used to resolve the default RenderMvcController that is used to render any front-end - /// Umbraco page when using MVC when there are no routes hijacked. - /// - public class DefaultRenderMvcControllerResolver : SingleObjectResolverBase - { - /// - /// Constructor accepting the default RenderMvcController - /// - /// - public DefaultRenderMvcControllerResolver(Type value) - : base(value) - { - ValidateType(value); - } - - /// - /// Returns the Default RenderMvcController type - /// - /// - public Type GetDefaultControllerType() - { - return Value; - } - - /// - /// Sets the default RenderMvcController type - /// - /// - public void SetDefaultControllerType(Type controllerType) - { - ValidateType(controllerType); - Value = controllerType; - } - - /// - /// Ensures that the type passed in is of type RenderMvcController - /// - /// - private void ValidateType(Type type) - { - if (TypeHelper.IsTypeAssignableFrom(type) == false) - { - throw new InvalidOperationException("The Type specified (" + type + ") is not of type " + typeof (IRenderController)); - } - } - - } -} diff --git a/src/Umbraco.Web/Mvc/RenderRouteHandler.cs b/src/Umbraco.Web/Mvc/RenderRouteHandler.cs index 711f90cd6a..251eb541b0 100644 --- a/src/Umbraco.Web/Mvc/RenderRouteHandler.cs +++ b/src/Umbraco.Web/Mvc/RenderRouteHandler.cs @@ -282,7 +282,7 @@ namespace Umbraco.Web.Mvc if (requestContext == null) throw new ArgumentNullException("requestContext"); if (publishedContentRequest == null) throw new ArgumentNullException("publishedContentRequest"); - var defaultControllerType = DefaultRenderMvcControllerResolver.Current.GetDefaultControllerType(); + var defaultControllerType = Current.DefaultRenderMvcControllerType; var defaultControllerName = ControllerExtensions.GetControllerName(defaultControllerType); //creates the default route definition which maps to the 'UmbracoController' controller var def = new RouteDefinition diff --git a/src/Umbraco.Web/Mvc/UmbracoControllerFactory.cs b/src/Umbraco.Web/Mvc/UmbracoControllerFactory.cs index 02ff701c8b..fc1d4c568a 100644 --- a/src/Umbraco.Web/Mvc/UmbracoControllerFactory.cs +++ b/src/Umbraco.Web/Mvc/UmbracoControllerFactory.cs @@ -30,10 +30,9 @@ namespace Umbraco.Web.Mvc public virtual IController CreateController(RequestContext requestContext, string controllerName) { var controllerType = GetControllerType(requestContext, controllerName) ?? - _innerFactory.GetControllerType( - requestContext, - ControllerExtensions.GetControllerName( - DefaultRenderMvcControllerResolver.Current.GetDefaultControllerType())); + _innerFactory.GetControllerType( + requestContext, + ControllerExtensions.GetControllerName(Current.DefaultRenderMvcControllerType)); return _innerFactory.GetControllerInstance(requestContext, controllerType); } diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index d8fc494dc6..6e88a0e6e3 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -830,7 +830,6 @@ - diff --git a/src/Umbraco.Web/WebBootManager.cs b/src/Umbraco.Web/WebBootManager.cs index 8fa1933fcb..62ed13dcff 100644 --- a/src/Umbraco.Web/WebBootManager.cs +++ b/src/Umbraco.Web/WebBootManager.cs @@ -408,8 +408,8 @@ namespace Umbraco.Web EditorValidatorCollectionBuilder.Register(Container) .AddProducer(() => PluginManager.ResolveTypes()); - //set the default RenderMvcController - DefaultRenderMvcControllerResolver.Current = new DefaultRenderMvcControllerResolver(typeof(RenderMvcController)); + // set the default RenderMvcController + Current.DefaultRenderMvcControllerType = typeof (RenderMvcController); // fixme WRONG! //Override the default server messenger, we need to check if the legacy dist calls is enabled, if that is the // case, then we'll set the default messenger to be the old one, otherwise we'll set it to the db messenger