Use DefaultOrder in MvcOptionsSetup

This commit is contained in:
Ryan Nowak 2014-10-14 12:48:29 -07:00
parent 44d888c319
commit 5f47546d40
4 changed files with 91 additions and 4 deletions

View File

@ -12,10 +12,9 @@ namespace Microsoft.AspNet.Mvc
/// </summary>
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)
{
Order = -1;
Order = DefaultOrder.DefaultFrameworkSortOrder;
}
/// <inheritdoc />

View File

@ -27,11 +27,10 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests
// use it on all the rest of the tests.
private readonly Assembly _resourcesAssembly = typeof(BasicTests).GetTypeInfo().Assembly;
[Theory]
[InlineData("http://localhost/")]
[InlineData("http://localhost/Home")]
[InlineData("http://localhost/Home/Index")]
[InlineData("http://localhost/Users")]
[InlineData("http://localhost/Monitor/CountActionDescriptorInvocations")]
public async Task CanRender_ViewsWithLayout(string url)
{
// Arrange

View File

@ -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));
}
}
}

View File

@ -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();
}
}
}