diff --git a/src/Microsoft.AspNet.Mvc.Core/ParameterBinding/DefaultActionBindingContextProvider.cs b/src/Microsoft.AspNet.Mvc.Core/ParameterBinding/DefaultActionBindingContextProvider.cs index 1336f3aee0..f4b6a0a0ed 100644 --- a/src/Microsoft.AspNet.Mvc.Core/ParameterBinding/DefaultActionBindingContextProvider.cs +++ b/src/Microsoft.AspNet.Mvc.Core/ParameterBinding/DefaultActionBindingContextProvider.cs @@ -33,9 +33,11 @@ public DefaultActionBindingContextProvider(IModelMetadataProvider modelMetadataP public Task GetActionBindingContextAsync(ActionContext actionContext) { - var routeContext = new RouteContext(actionContext.HttpContext); - routeContext.RouteData = actionContext.RouteData; - var valueProviders = _valueProviderFactories.Select(factory => factory.GetValueProvider(routeContext)) + var factoryContext = new ValueProviderFactoryContext( + actionContext.HttpContext, + actionContext.RouteData.Values); + + var valueProviders = _valueProviderFactories.Select(factory => factory.GetValueProvider(factoryContext)) .Where(vp => vp != null); var context = new ActionBindingContext( actionContext, diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/Microsoft.AspNet.Mvc.ModelBinding.kproj b/src/Microsoft.AspNet.Mvc.ModelBinding/Microsoft.AspNet.Mvc.ModelBinding.kproj index 81ab7bf31b..c2dc72ddf5 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/Microsoft.AspNet.Mvc.ModelBinding.kproj +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/Microsoft.AspNet.Mvc.ModelBinding.kproj @@ -115,6 +115,7 @@ + diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/FormValueProviderFactory.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/FormValueProviderFactory.cs index 845f1a6d51..72fb6fa2a2 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/FormValueProviderFactory.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/FormValueProviderFactory.cs @@ -4,7 +4,6 @@ using System; using System.Globalization; using Microsoft.AspNet.Http; -using Microsoft.AspNet.Routing; namespace Microsoft.AspNet.Mvc.ModelBinding { @@ -12,9 +11,9 @@ public class FormValueProviderFactory : IValueProviderFactory { private const string FormEncodedContentType = "application/x-www-form-urlencoded"; - public IValueProvider GetValueProvider([NotNull] RouteContext routeContext) + public IValueProvider GetValueProvider([NotNull] ValueProviderFactoryContext context) { - var request = routeContext.HttpContext.Request; + var request = context.HttpContext.Request; if (IsSupportedContentType(request)) { diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/IValueProviderFactory.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/IValueProviderFactory.cs index 8be06cf87e..d17207b445 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/IValueProviderFactory.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/IValueProviderFactory.cs @@ -1,8 +1,6 @@ // 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 Microsoft.AspNet.Routing; - namespace Microsoft.AspNet.Mvc.ModelBinding { public interface IValueProviderFactory @@ -10,8 +8,8 @@ public interface IValueProviderFactory /// /// Get a value provider with values from the given . /// - /// RouteContext that value provider will populate from + /// ValueProviderFactoryContext that value provider will populate from /// a value provider instance or null - IValueProvider GetValueProvider([NotNull] RouteContext routeContext); + IValueProvider GetValueProvider([NotNull] ValueProviderFactoryContext context); } } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/QueryStringValueProviderFactory.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/QueryStringValueProviderFactory.cs index 563392e432..0796be18f0 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/QueryStringValueProviderFactory.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/QueryStringValueProviderFactory.cs @@ -2,7 +2,6 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Globalization; -using Microsoft.AspNet.Routing; namespace Microsoft.AspNet.Mvc.ModelBinding { @@ -10,15 +9,15 @@ public class QueryStringValueProviderFactory : IValueProviderFactory { private static readonly object _cacheKey = new object(); - public IValueProvider GetValueProvider([NotNull] RouteContext routeContext) + public IValueProvider GetValueProvider([NotNull] ValueProviderFactoryContext context) { // Process the query collection once-per request. - var storage = routeContext.HttpContext.Items; + var storage = context.HttpContext.Items; object value; IValueProvider provider; if (!storage.TryGetValue(_cacheKey, out value)) { - var queryCollection = routeContext.HttpContext.Request.Query; + var queryCollection = context.HttpContext.Request.Query; provider = new ReadableStringCollectionValueProvider(queryCollection, CultureInfo.InvariantCulture); storage[_cacheKey] = provider; } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/RouteValueValueProviderFactory.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/RouteValueValueProviderFactory.cs index bb0ce995cf..5cc9484e3f 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/RouteValueValueProviderFactory.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/RouteValueValueProviderFactory.cs @@ -1,15 +1,13 @@ // 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 Microsoft.AspNet.Routing; - namespace Microsoft.AspNet.Mvc.ModelBinding { public class RouteValueValueProviderFactory : IValueProviderFactory { - public IValueProvider GetValueProvider([NotNull] RouteContext routeContext) + public IValueProvider GetValueProvider([NotNull] ValueProviderFactoryContext context) { - return new DictionaryBasedValueProvider(routeContext.RouteData.Values); + return new DictionaryBasedValueProvider(context.RouteValues); } } } diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/ValueProviderFactoryContext.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/ValueProviderFactoryContext.cs new file mode 100644 index 0000000000..020bc00b44 --- /dev/null +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/ValueProviderFactoryContext.cs @@ -0,0 +1,23 @@ +// 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.Collections.Generic; +using Microsoft.AspNet.Http; + +namespace Microsoft.AspNet.Mvc.ModelBinding +{ + public class ValueProviderFactoryContext + { + public ValueProviderFactoryContext( + [NotNull] HttpContext httpContext, + [NotNull] IDictionary routeValues) + { + HttpContext = httpContext; + RouteValues = routeValues; + } + + public HttpContext HttpContext { get; private set; } + + public IDictionary RouteValues { get; private set; } + } +} \ No newline at end of file diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/project.json b/src/Microsoft.AspNet.Mvc.ModelBinding/project.json index 6c44f6c483..099328996c 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/project.json +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/project.json @@ -6,7 +6,6 @@ "dependencies": { "Microsoft.AspNet.Http": "0.1-alpha-*", "Microsoft.AspNet.Mvc.Common": "", - "Microsoft.AspNet.Routing": "0.1-alpha-*", "Microsoft.DataAnnotations": "0.1-alpha-*", "Microsoft.Framework.DependencyInjection": "0.1-alpha-*", "Newtonsoft.Json": "5.0.8" diff --git a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/FormValueProviderFactoryTests.cs b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/FormValueProviderFactoryTests.cs index 06803cab03..9173d79aba 100644 --- a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/FormValueProviderFactoryTests.cs +++ b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/FormValueProviderFactoryTests.cs @@ -19,11 +19,11 @@ public class FormValueProviderFactoryTests public void GetValueProvider_ReturnsNull_WhenContentTypeIsNotFormUrlEncoded() { // Arrange - var requestContext = CreateRequestContext("some-content-type"); + var context = CreateContext("some-content-type"); var factory = new FormValueProviderFactory(); // Act - var result = factory.GetValueProvider(requestContext); + var result = factory.GetValueProvider(context); // Assert Assert.Null(result); @@ -35,18 +35,18 @@ public void GetValueProvider_ReturnsNull_WhenContentTypeIsNotFormUrlEncoded() public void GetValueProvider_ReturnsValueProviderInstaceWithInvariantCulture(string contentType) { // Arrange - var requestContext = CreateRequestContext(contentType); + var context = CreateContext(contentType); var factory = new FormValueProviderFactory(); // Act - var result = factory.GetValueProvider(requestContext); + var result = factory.GetValueProvider(context); // Assert var valueProvider = Assert.IsType(result); Assert.Equal(CultureInfo.CurrentCulture, valueProvider.Culture); } - private static RouteContext CreateRequestContext(string contentType) + private static ValueProviderFactoryContext CreateContext(string contentType) { var collection = Mock.Of(); var request = new Mock(); @@ -59,9 +59,9 @@ private static RouteContext CreateRequestContext(string contentType) var context = new Mock(); context.SetupGet(c => c.Request).Returns(request.Object); - var routeContext = new RouteContext(context.Object); - routeContext.RouteData.Values = new Dictionary(StringComparer.OrdinalIgnoreCase); - return routeContext; + return new ValueProviderFactoryContext( + context.Object, + new Dictionary(StringComparer.OrdinalIgnoreCase)); } } } diff --git a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/QueryStringValueProviderFactoryTest.cs b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/QueryStringValueProviderFactoryTest.cs index 9ed37bd366..41f0c4b21d 100644 --- a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/QueryStringValueProviderFactoryTest.cs +++ b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/QueryStringValueProviderFactoryTest.cs @@ -27,11 +27,10 @@ public void GetValueProvider_ReturnsQueryStringValueProviderInstaceWithInvariant var context = new Mock(); context.SetupGet(c => c.Items).Returns(new Dictionary()); context.SetupGet(c => c.Request).Returns(request.Object); - var routeContext = new RouteContext(context.Object); - routeContext.RouteData.Values = new Dictionary(StringComparer.OrdinalIgnoreCase); + var factoryContext = new ValueProviderFactoryContext(context.Object, new Dictionary(StringComparer.OrdinalIgnoreCase)); // Act - var result = _factory.GetValueProvider(routeContext); + var result = _factory.GetValueProvider(factoryContext); // Assert var valueProvider = Assert.IsType(result);