Skip to content
This repository was archived by the owner on Dec 14, 2018. It is now read-only.

Commit 4a7ada5

Browse files
committed
Make IValueProvider sync, IValueProviderFactory async
1 parent 3519c37 commit 4a7ada5

36 files changed

+301
-355
lines changed

src/Microsoft.AspNet.Mvc.Abstractions/ModelBinding/IValueProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ public interface IValueProvider
1515
/// </summary>
1616
/// <param name="prefix">The prefix to search for.</param>
1717
/// <returns>true if the collection contains the specified prefix; otherwise, false.</returns>
18-
Task<bool> ContainsPrefixAsync(string prefix);
18+
bool ContainsPrefix(string prefix);
1919

2020
/// <summary>
2121
/// Retrieves a value object using the specified key.
2222
/// </summary>
2323
/// <param name="key">The key of the value object to retrieve.</param>
2424
/// <returns>The value object for the specified key. If the exact key is not found, null.</returns>
25-
Task<ValueProviderResult> GetValueAsync(string key);
25+
ValueProviderResult GetValue(string key);
2626
}
2727
}
Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

4+
using System.Threading.Tasks;
45
using Microsoft.Framework.Internal;
56

67
namespace Microsoft.AspNet.Mvc.ModelBinding
78
{
89
public interface IValueProviderFactory
910
{
1011
/// <summary>
11-
/// Get a value provider with values from the given <paramref name="requestContext"/>.
12+
/// Gets a <see cref="IValueProvider"/> with values from the current request.
1213
/// </summary>
13-
/// <param name="context">ValueProviderFactoryContext that value provider will populate from</param>
14-
/// <returns>a value provider instance or null</returns>
15-
IValueProvider GetValueProvider([NotNull] ValueProviderFactoryContext context);
14+
/// <param name="context">The <see cref="ValueProviderFactoryContext"/>.</param>
15+
/// <returns>
16+
/// A <see cref="Task"/> that when completed will yield a <see cref="IValueProvider"/> instance or <c>null</c>.
17+
/// </returns>
18+
Task<IValueProvider> GetValueProviderAsync([NotNull] ValueProviderFactoryContext context);
1619
}
1720
}

src/Microsoft.AspNet.Mvc.Abstractions/ModelBinding/ValueProviderResult.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
namespace Microsoft.AspNet.Mvc.ModelBinding
1212
{
1313
/// <summary>
14-
/// Result of an <see cref="IValueProvider.GetValueAsync(string)"/> operation.
14+
/// Result of an <see cref="IValueProvider.GetValue(string)"/> operation.
1515
/// </summary>
1616
/// <remarks>
1717
/// <para>

src/Microsoft.AspNet.Mvc.Core/FilterActionInvoker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ await item.FilterAsync.OnResourceExecutionAsync(
333333
ActionContext.HttpContext,
334334
ActionContext.RouteData.Values);
335335

336-
ActionBindingContext.ValueProvider = CompositeValueProvider.Create(
336+
ActionBindingContext.ValueProvider = await CompositeValueProvider.CreateAsync(
337337
_resourceExecutingContext.ValueProviderFactories,
338338
valueProviderFactoryContext);
339339

src/Microsoft.AspNet.Mvc.Core/ModelBinding/BindingSourceValueProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,10 @@ public BindingSourceValueProvider([NotNull] BindingSource bindingSource)
6060
protected BindingSource BindingSource { get; }
6161

6262
/// <inheritdoc />
63-
public abstract Task<bool> ContainsPrefixAsync(string prefix);
63+
public abstract bool ContainsPrefix(string prefix);
6464

6565
/// <inheritdoc />
66-
public abstract Task<ValueProviderResult> GetValueAsync(string key);
66+
public abstract ValueProviderResult GetValue(string key);
6767

6868
/// <inheritdoc />
6969
public virtual IValueProvider Filter(BindingSource bindingSource)

src/Microsoft.AspNet.Mvc.Core/ModelBinding/ByteArrayModelBinder.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
1313
public class ByteArrayModelBinder : IModelBinder
1414
{
1515
/// <inheritdoc />
16-
public async Task<ModelBindingResult> BindModelAsync([NotNull] ModelBindingContext bindingContext)
16+
public Task<ModelBindingResult> BindModelAsync([NotNull] ModelBindingContext bindingContext)
17+
{
18+
return Task.FromResult(BindModel(bindingContext));
19+
}
20+
21+
private ModelBindingResult BindModel(ModelBindingContext bindingContext)
1722
{
1823
// Check if this binder applies.
1924
if (bindingContext.ModelType != typeof(byte[]))
@@ -22,7 +27,7 @@ public async Task<ModelBindingResult> BindModelAsync([NotNull] ModelBindingConte
2227
}
2328

2429
// Check for missing data case 1: There was no <input ... /> element containing this data.
25-
var valueProviderResult = await bindingContext.ValueProvider.GetValueAsync(bindingContext.ModelName);
30+
var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
2631
if (valueProviderResult == ValueProviderResult.None)
2732
{
2833
return new ModelBindingResult(model: null, key: bindingContext.ModelName, isModelSet: false);

src/Microsoft.AspNet.Mvc.Core/ModelBinding/CollectionModelBinder.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public virtual async Task<ModelBindingResult> BindModelAsync([NotNull] ModelBind
2727
ModelBindingHelper.ValidateBindingContext(bindingContext);
2828

2929
var model = bindingContext.Model;
30-
if (!await bindingContext.ValueProvider.ContainsPrefixAsync(bindingContext.ModelName))
30+
if (!bindingContext.ValueProvider.ContainsPrefix(bindingContext.ModelName))
3131
{
3232
// If this is the fallback case and we failed to find data for a top-level model, then generate a
3333
// default 'empty' model (or use existing Model) and return it.
@@ -53,7 +53,7 @@ public virtual async Task<ModelBindingResult> BindModelAsync([NotNull] ModelBind
5353
return null;
5454
}
5555

56-
var valueProviderResult = await bindingContext.ValueProvider.GetValueAsync(bindingContext.ModelName);
56+
var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
5757

5858
CollectionResult result;
5959
if (valueProviderResult == ValueProviderResult.None)
@@ -188,7 +188,7 @@ internal async Task<CollectionResult> BindSimpleCollection(
188188
private async Task<CollectionResult> BindComplexCollection(ModelBindingContext bindingContext)
189189
{
190190
var indexPropertyName = ModelNames.CreatePropertyModelName(bindingContext.ModelName, "index");
191-
var valueProviderResultIndex = await bindingContext.ValueProvider.GetValueAsync(indexPropertyName);
191+
var valueProviderResultIndex = bindingContext.ValueProvider.GetValue(indexPropertyName);
192192
var indexNames = GetIndexNamesFromValueProviderResult(valueProviderResultIndex);
193193

194194
return await BindComplexCollectionFromIndexes(bindingContext, indexNames);

src/Microsoft.AspNet.Mvc.Core/ModelBinding/CompositeValueProvider.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ public CompositeValueProvider(IEnumerable<IValueProvider> valueProviders)
4646
/// A <see cref="CompositeValueProvider"/> containing all <see cref="IValueProvider"/> instances
4747
/// created.
4848
/// </returns>
49-
public static CompositeValueProvider Create(
49+
public static async Task<CompositeValueProvider> CreateAsync(
5050
[NotNull] IEnumerable<IValueProviderFactory> factories,
5151
[NotNull] ValueProviderFactoryContext context)
5252
{
5353
var composite = new CompositeValueProvider();
5454
foreach (var valueProvidersFactory in factories)
5555
{
56-
var valueProvider = valueProvidersFactory.GetValueProvider(context);
56+
var valueProvider = await valueProvidersFactory.GetValueProviderAsync(context);
5757
if (valueProvider != null)
5858
{
5959
composite.Add(valueProvider);
@@ -64,11 +64,11 @@ public static CompositeValueProvider Create(
6464
}
6565

6666
/// <inheritdoc />
67-
public virtual async Task<bool> ContainsPrefixAsync(string prefix)
67+
public virtual bool ContainsPrefix(string prefix)
6868
{
6969
for (var i = 0; i < Count; i++)
7070
{
71-
if (await this[i].ContainsPrefixAsync(prefix))
71+
if (this[i].ContainsPrefix(prefix))
7272
{
7373
return true;
7474
}
@@ -77,15 +77,15 @@ public virtual async Task<bool> ContainsPrefixAsync(string prefix)
7777
}
7878

7979
/// <inheritdoc />
80-
public virtual async Task<ValueProviderResult> GetValueAsync(string key)
80+
public virtual ValueProviderResult GetValue(string key)
8181
{
8282
// Performance-sensitive
8383
// Caching the count is faster for IList<T>
8484
var itemCount = Items.Count;
8585
for (var i = 0; i < itemCount; i++)
8686
{
8787
var valueProvider = Items[i];
88-
var result = await valueProvider.GetValueAsync(key);
88+
var result = valueProvider.GetValue(key);
8989
if (result != ValueProviderResult.None)
9090
{
9191
return result;
@@ -96,14 +96,14 @@ public virtual async Task<ValueProviderResult> GetValueAsync(string key)
9696
}
9797

9898
/// <inheritdoc />
99-
public virtual async Task<IDictionary<string, string>> GetKeysFromPrefixAsync(string prefix)
99+
public virtual IDictionary<string, string> GetKeysFromPrefix(string prefix)
100100
{
101101
foreach (var valueProvider in this)
102102
{
103103
var enumeratedProvider = valueProvider as IEnumerableValueProvider;
104104
if (enumeratedProvider != null)
105105
{
106-
var result = await enumeratedProvider.GetKeysFromPrefixAsync(prefix);
106+
var result = enumeratedProvider.GetKeysFromPrefix(prefix);
107107
if (result != null && result.Count > 0)
108108
{
109109
return result;

src/Microsoft.AspNet.Mvc.Core/ModelBinding/DictionaryBasedValueProvider.cs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,27 +44,24 @@ protected PrefixContainer PrefixContainer
4444
}
4545

4646
/// <inheritdoc />
47-
public override Task<bool> ContainsPrefixAsync(string key)
47+
public override bool ContainsPrefix(string key)
4848
{
49-
return Task.FromResult(PrefixContainer.ContainsPrefix(key));
49+
return PrefixContainer.ContainsPrefix(key);
5050
}
5151

5252
/// <inheritdoc />
53-
public override Task<ValueProviderResult> GetValueAsync([NotNull] string key)
53+
public override ValueProviderResult GetValue([NotNull] string key)
5454
{
5555
object value;
56-
ValueProviderResult result;
5756
if (_values.TryGetValue(key, out value))
5857
{
5958
var stringValue = value as string ?? value?.ToString() ?? string.Empty;
60-
result = new ValueProviderResult(stringValue, CultureInfo.InvariantCulture);
59+
return new ValueProviderResult(stringValue, CultureInfo.InvariantCulture);
6160
}
6261
else
6362
{
64-
result = ValueProviderResult.None;
63+
return ValueProviderResult.None;
6564
}
66-
67-
return Task.FromResult(result);
6865
}
6966
}
7067
}

src/Microsoft.AspNet.Mvc.Core/ModelBinding/DictionaryModelBinder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public override async Task<ModelBindingResult> BindModelAsync([NotNull] ModelBin
4747
}
4848

4949
// Attempt to bind dictionary from a set of prefix[key]=value entries. Get the short and long keys first.
50-
var keys = await enumerableValueProvider.GetKeysFromPrefixAsync(bindingContext.ModelName);
50+
var keys = enumerableValueProvider.GetKeysFromPrefix(bindingContext.ModelName);
5151
if (!keys.Any())
5252
{
5353
// No entries with the expected keys.

0 commit comments

Comments
 (0)