Change RenderController defautl type to be swapped out using the .NETCore options pattern
This commit is contained in:
@@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Mvc.Controllers;
|
||||
using Microsoft.AspNetCore.Mvc.Infrastructure;
|
||||
using Microsoft.AspNetCore.Routing;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Cms.Core.Features;
|
||||
@@ -29,7 +30,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.Website.Routing
|
||||
{
|
||||
private UmbracoRouteValuesFactory GetFactory(
|
||||
out Mock<IPublishedRouter> publishedRouter,
|
||||
out UmbracoRenderingDefaults renderingDefaults,
|
||||
out IOptions<UmbracoRenderingDefaultsOptions> renderingDefaults,
|
||||
out IPublishedRequest request)
|
||||
{
|
||||
var builder = new PublishedRequestBuilder(new Uri("https://example.com"), Mock.Of<IFileService>());
|
||||
@@ -41,7 +42,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.Website.Routing
|
||||
.Returns((IPublishedRequest r, IPublishedContent c) => Task.FromResult(builtRequest))
|
||||
.Verifiable();
|
||||
|
||||
renderingDefaults = new UmbracoRenderingDefaults();
|
||||
renderingDefaults = Mock.Of<IOptions<UmbracoRenderingDefaultsOptions>>(x => x.Value.DefaultControllerType == typeof(RenderController));
|
||||
|
||||
// add the default one
|
||||
var actionDescriptors = new List<ActionDescriptor>
|
||||
@@ -82,12 +83,12 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.Website.Routing
|
||||
[Test]
|
||||
public async Task Adds_Result_To_Route_Value_Dictionary()
|
||||
{
|
||||
UmbracoRouteValuesFactory factory = GetFactory(out _, out UmbracoRenderingDefaults renderingDefaults, out IPublishedRequest request);
|
||||
UmbracoRouteValuesFactory factory = GetFactory(out _, out IOptions<UmbracoRenderingDefaultsOptions> renderingDefaults, out IPublishedRequest request);
|
||||
|
||||
UmbracoRouteValues result = await factory.CreateAsync(new DefaultHttpContext(), request);
|
||||
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(renderingDefaults.DefaultControllerType, result.ControllerType);
|
||||
Assert.AreEqual(renderingDefaults.Value.DefaultControllerType, result.ControllerType);
|
||||
Assert.AreEqual(UmbracoRouteValues.DefaultActionName, result.ActionName);
|
||||
Assert.IsNull(result.TemplateName);
|
||||
}
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
using System;
|
||||
using Umbraco.Cms.Web.Common.Controllers;
|
||||
|
||||
namespace Umbraco.Cms.Web.Website.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
/// The defaults used for rendering Umbraco front-end pages
|
||||
/// </summary>
|
||||
public class UmbracoRenderingDefaults : IUmbracoRenderingDefaults
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public Type DefaultControllerType => typeof(RenderController);
|
||||
}
|
||||
}
|
||||
@@ -5,11 +5,11 @@ namespace Umbraco.Cms.Web.Website.Controllers
|
||||
/// <summary>
|
||||
/// The defaults used for rendering Umbraco front-end pages
|
||||
/// </summary>
|
||||
public interface IUmbracoRenderingDefaults
|
||||
public class UmbracoRenderingDefaultsOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the default umbraco render controller type
|
||||
/// </summary>
|
||||
Type DefaultControllerType { get; }
|
||||
public Type DefaultControllerType { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
using System;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Umbraco.Cms.Web.Common.Controllers;
|
||||
|
||||
namespace Umbraco.Cms.Web.Website.Controllers
|
||||
{
|
||||
public class UmbracoRenderingDefaultsOptionsSetup : IConfigureOptions<UmbracoRenderingDefaultsOptions>
|
||||
{
|
||||
//private IOptions<UmbracoRenderingDefaultsOptions> _umbracoRenderingDefaultOptions;
|
||||
|
||||
//public UmbracoRenderingDefaultsOptionsSetup(IOptions<UmbracoRenderingDefaultsOptions> umbracoRenderingDefaultOptions)
|
||||
//{
|
||||
// _umbracoRenderingDefaultOptions = umbracoRenderingDefaultOptions;
|
||||
//}
|
||||
|
||||
public void Configure(UmbracoRenderingDefaultsOptions options)
|
||||
{
|
||||
if (options == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(options));
|
||||
}
|
||||
|
||||
//options.DefaultControllerType = _umbracoRenderingDefaultOptions.Value.DefaultControllerType;
|
||||
|
||||
options.DefaultControllerType = typeof(RenderController);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -40,7 +40,10 @@ namespace Umbraco.Extensions
|
||||
builder.Services.AddScoped<UmbracoRouteValueTransformer>();
|
||||
builder.Services.AddSingleton<IControllerActionSearcher, ControllerActionSearcher>();
|
||||
builder.Services.AddSingleton<IUmbracoRouteValuesFactory, UmbracoRouteValuesFactory>();
|
||||
builder.Services.AddSingleton<IUmbracoRenderingDefaults, UmbracoRenderingDefaults>();
|
||||
|
||||
// Umbraco Rendering Defaults startup options to define which RenderController type to use
|
||||
builder.Services.ConfigureOptions<UmbracoRenderingDefaultsOptionsSetup>();
|
||||
|
||||
builder.Services.AddSingleton<IRoutableDocumentFilter, RoutableDocumentFilter>();
|
||||
|
||||
builder.Services.AddSingleton<FrontEndRoutes>();
|
||||
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc.Controllers;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Umbraco.Cms.Core.Features;
|
||||
using Umbraco.Cms.Core.Models.PublishedContent;
|
||||
using Umbraco.Cms.Core.Routing;
|
||||
@@ -18,7 +19,6 @@ namespace Umbraco.Cms.Web.Website.Routing
|
||||
/// </summary>
|
||||
public class UmbracoRouteValuesFactory : IUmbracoRouteValuesFactory
|
||||
{
|
||||
private readonly IUmbracoRenderingDefaults _renderingDefaults;
|
||||
private readonly IShortStringHelper _shortStringHelper;
|
||||
private readonly UmbracoFeatures _umbracoFeatures;
|
||||
private readonly IControllerActionSearcher _controllerActionSearcher;
|
||||
@@ -30,18 +30,17 @@ namespace Umbraco.Cms.Web.Website.Routing
|
||||
/// Initializes a new instance of the <see cref="UmbracoRouteValuesFactory"/> class.
|
||||
/// </summary>
|
||||
public UmbracoRouteValuesFactory(
|
||||
IUmbracoRenderingDefaults renderingDefaults,
|
||||
IOptions<UmbracoRenderingDefaultsOptions> renderingDefaults,
|
||||
IShortStringHelper shortStringHelper,
|
||||
UmbracoFeatures umbracoFeatures,
|
||||
IControllerActionSearcher controllerActionSearcher,
|
||||
IPublishedRouter publishedRouter)
|
||||
{
|
||||
_renderingDefaults = renderingDefaults;
|
||||
_shortStringHelper = shortStringHelper;
|
||||
_umbracoFeatures = umbracoFeatures;
|
||||
_controllerActionSearcher = controllerActionSearcher;
|
||||
_publishedRouter = publishedRouter;
|
||||
_defaultControllerName = new Lazy<string>(() => ControllerExtensions.GetControllerName(_renderingDefaults.DefaultControllerType));
|
||||
_defaultControllerName = new Lazy<string>(() => ControllerExtensions.GetControllerName(renderingDefaults.Value.DefaultControllerType));
|
||||
_defaultControllerDescriptor = new Lazy<ControllerActionDescriptor>(() =>
|
||||
{
|
||||
ControllerActionDescriptor descriptor = _controllerActionSearcher.Find<IRenderController>(
|
||||
|
||||
Reference in New Issue
Block a user