Use DefaultOrder in MvcOptionsSetup
This commit is contained in:
parent
44d888c319
commit
5f47546d40
|
|
@ -12,10 +12,9 @@ namespace Microsoft.AspNet.Mvc
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class MvcOptionsSetup : ConfigureOptions<MvcOptions>
|
public class MvcOptionsSetup : ConfigureOptions<MvcOptions>
|
||||||
{
|
{
|
||||||
/// <remarks>Sets the Order to -1 to allow MvcOptionsSetup to run before a user call to ConfigureOptions.</remarks>
|
|
||||||
public MvcOptionsSetup() : base(ConfigureMvc)
|
public MvcOptionsSetup() : base(ConfigureMvc)
|
||||||
{
|
{
|
||||||
Order = -1;
|
Order = DefaultOrder.DefaultFrameworkSortOrder;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
|
|
|
||||||
|
|
@ -27,11 +27,10 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests
|
||||||
// use it on all the rest of the tests.
|
// use it on all the rest of the tests.
|
||||||
private readonly Assembly _resourcesAssembly = typeof(BasicTests).GetTypeInfo().Assembly;
|
private readonly Assembly _resourcesAssembly = typeof(BasicTests).GetTypeInfo().Assembly;
|
||||||
|
|
||||||
|
[Theory]
|
||||||
[InlineData("http://localhost/")]
|
[InlineData("http://localhost/")]
|
||||||
[InlineData("http://localhost/Home")]
|
[InlineData("http://localhost/Home")]
|
||||||
[InlineData("http://localhost/Home/Index")]
|
[InlineData("http://localhost/Home/Index")]
|
||||||
[InlineData("http://localhost/Users")]
|
|
||||||
[InlineData("http://localhost/Monitor/CountActionDescriptorInvocations")]
|
|
||||||
public async Task CanRender_ViewsWithLayout(string url)
|
public async Task CanRender_ViewsWithLayout(string url)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Net;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNet.Builder;
|
||||||
|
using Microsoft.AspNet.Mvc.Description;
|
||||||
|
using Microsoft.AspNet.Mvc.Razor;
|
||||||
|
using Microsoft.AspNet.TestHost;
|
||||||
|
using Microsoft.Framework.DependencyInjection;
|
||||||
|
using Microsoft.Framework.OptionsModel;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.FunctionalTests
|
||||||
|
{
|
||||||
|
// Tests that various MVC services have the correct order.
|
||||||
|
public class DefaultOrderTest
|
||||||
|
{
|
||||||
|
private readonly IServiceProvider _provider = TestHelper.CreateServices(nameof(BasicWebSite));
|
||||||
|
private readonly Action<IApplicationBuilder> _app = new BasicWebSite.Startup().Configure;
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData(typeof(INestedProvider<ActionDescriptorProviderContext>), typeof(ControllerActionDescriptorProvider), -1000)]
|
||||||
|
[InlineData(typeof(INestedProvider<ActionInvokerProviderContext>), (Type)null, -1000)]
|
||||||
|
[InlineData(typeof(INestedProvider<ApiDescriptionProviderContext>), (Type)null, -1000)]
|
||||||
|
[InlineData(typeof(INestedProvider<FilterProviderContext>), (Type)null, -1000)]
|
||||||
|
[InlineData(typeof(INestedProvider<ViewComponentInvokerProviderContext>), (Type)null, -1000)]
|
||||||
|
[InlineData(typeof(IConfigureOptions<RazorViewEngineOptions>), (Type)null, -1000)]
|
||||||
|
[InlineData(typeof(IConfigureOptions<MvcOptions>), (Type)null, -1000)]
|
||||||
|
public async Task ServiceOrder_GetOrder(Type serviceType, Type actualType, int order)
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var server = TestServer.Create(_provider, _app);
|
||||||
|
var client = server.CreateClient();
|
||||||
|
|
||||||
|
var url = "http://localhost/Order/GetServiceOrder?serviceType=" + serviceType.AssemblyQualifiedName;
|
||||||
|
|
||||||
|
if (actualType != null)
|
||||||
|
{
|
||||||
|
url += "&actualType=" + actualType.AssemblyQualifiedName;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var response = await client.GetAsync(url);
|
||||||
|
var content = await response.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
||||||
|
Assert.Equal(order, int.Parse(content));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Microsoft.AspNet.Mvc;
|
||||||
|
|
||||||
|
namespace BasicWebSite
|
||||||
|
{
|
||||||
|
public class OrderController : Controller
|
||||||
|
{
|
||||||
|
public int GetServiceOrder(string serviceType, string actualType)
|
||||||
|
{
|
||||||
|
var elementType = Type.GetType(serviceType);
|
||||||
|
|
||||||
|
var queryType = typeof(IEnumerable<>).MakeGenericType(elementType);
|
||||||
|
|
||||||
|
var services = (IEnumerable<object>)Resolver.GetService(queryType);
|
||||||
|
foreach (var service in services)
|
||||||
|
{
|
||||||
|
if (actualType != null && service.GetType().AssemblyQualifiedName == actualType)
|
||||||
|
{
|
||||||
|
var orderProperty = elementType.GetProperty("Order");
|
||||||
|
return (int)orderProperty.GetValue(service);
|
||||||
|
}
|
||||||
|
else if (actualType == null)
|
||||||
|
{
|
||||||
|
var orderProperty = elementType.GetProperty("Order");
|
||||||
|
return (int)orderProperty.GetValue(service);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new InvalidOperationException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue