Commonizing code in option provider
* Adding ValueProviderFactoryProvider and CompositeValueProviderFactory to maintain parity in pattern with other option types. Fixes #818
This commit is contained in:
parent
92e26cf8e0
commit
da0bf6f7d8
|
|
@ -1,61 +0,0 @@
|
||||||
// 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 Microsoft.AspNet.Mvc.Core;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Encapsulates information that describes an <see cref="OutputFormatter"/>.
|
|
||||||
/// </summary>
|
|
||||||
public class OutputFormatterDescriptor
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new instance of <see cref="OutputFormatterDescriptor"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="outputFormatterType">A <see cref="OutputFormatter/> type that the descriptor represents.
|
|
||||||
/// </param>
|
|
||||||
public OutputFormatterDescriptor([NotNull] Type outputFormatterType)
|
|
||||||
{
|
|
||||||
var formatterType = typeof(OutputFormatter);
|
|
||||||
if (!formatterType.IsAssignableFrom(outputFormatterType))
|
|
||||||
{
|
|
||||||
var message = Resources.FormatTypeMustDeriveFromType(outputFormatterType,
|
|
||||||
formatterType.FullName);
|
|
||||||
throw new ArgumentException(message, "outputFormatterType");
|
|
||||||
}
|
|
||||||
|
|
||||||
OutputFormatterType = outputFormatterType;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new instance of <see cref="OutputFormatterDescriptor"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="outputFormatter">An instance of <see cref="OutputFormatter"/>
|
|
||||||
/// that the descriptor represents.</param>
|
|
||||||
public OutputFormatterDescriptor([NotNull] OutputFormatter outputFormatter)
|
|
||||||
{
|
|
||||||
OutputFormatter = outputFormatter;
|
|
||||||
OutputFormatterType = outputFormatter.GetType();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the type of the <see cref="OutputFormatter"/>.
|
|
||||||
/// </summary>
|
|
||||||
public Type OutputFormatterType
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
private set;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the instance of the <see cref="OutputFormatter"/>.
|
|
||||||
/// </summary>
|
|
||||||
public OutputFormatter OutputFormatter
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
private set;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -29,14 +29,24 @@
|
||||||
<Compile Include="ActionDescriptor.cs" />
|
<Compile Include="ActionDescriptor.cs" />
|
||||||
<Compile Include="ActionDescriptorProviderContext.cs" />
|
<Compile Include="ActionDescriptorProviderContext.cs" />
|
||||||
<Compile Include="ActionDescriptorsCollection.cs" />
|
<Compile Include="ActionDescriptorsCollection.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\DefaultModelBinderProvider.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\DefaultValueProviderFactoryProvider.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\DefaultViewEngineProvider.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\ModelBinderDescriptor.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\OutputFormatterDescriptorExtensions.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\ModelBinderDescriptorExtensions.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\OptionDescriptorBasedProvider.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\OptionDescriptor.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\OutputFormatterDescriptor.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\ValueProviderFactoryDescriptor.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\ViewEngineDescriptor.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\ValueProviderFactoryDescriptorExtensions.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\ViewEngineDescriptorExtensions.cs" />
|
||||||
<Compile Include="ExpiringFileInfoCache.cs" />
|
<Compile Include="ExpiringFileInfoCache.cs" />
|
||||||
<Compile Include="Extensions\ViewEngineDescriptorExtensions.cs" />
|
|
||||||
<Compile Include="IExpiringFileInfoCache.cs" />
|
<Compile Include="IExpiringFileInfoCache.cs" />
|
||||||
<Compile Include="Formatters\OutputFormatterContext.cs" />
|
<Compile Include="Formatters\OutputFormatterContext.cs" />
|
||||||
<Compile Include="Formatters\JsonOutputFormatter.cs" />
|
<Compile Include="Formatters\JsonOutputFormatter.cs" />
|
||||||
<Compile Include="Formatters\OutputFormatter.cs" />
|
<Compile Include="Formatters\OutputFormatter.cs" />
|
||||||
<Compile Include="Formatters\OutputFormatterDescriptor.cs" />
|
|
||||||
<Compile Include="OutputFormatterDescriptorExtensions.cs" />
|
|
||||||
<Compile Include="ReflectedActionDescriptor.cs" />
|
<Compile Include="ReflectedActionDescriptor.cs" />
|
||||||
<Compile Include="ReflectedActionDescriptorProvider.cs" />
|
<Compile Include="ReflectedActionDescriptorProvider.cs" />
|
||||||
<Compile Include="ReflectedModelBuilder\IReflectedApplicationModelConvention.cs" />
|
<Compile Include="ReflectedModelBuilder\IReflectedApplicationModelConvention.cs" />
|
||||||
|
|
@ -155,7 +165,6 @@
|
||||||
<Compile Include="ParameterBindingInfo.cs" />
|
<Compile Include="ParameterBindingInfo.cs" />
|
||||||
<Compile Include="ParameterBinding\ActionBindingContext.cs" />
|
<Compile Include="ParameterBinding\ActionBindingContext.cs" />
|
||||||
<Compile Include="ParameterBinding\DefaultActionBindingContextProvider.cs" />
|
<Compile Include="ParameterBinding\DefaultActionBindingContextProvider.cs" />
|
||||||
<Compile Include="ParameterBinding\DefaultModelBindersProvider.cs" />
|
|
||||||
<Compile Include="ParameterBinding\FromBodyAttribute.cs" />
|
<Compile Include="ParameterBinding\FromBodyAttribute.cs" />
|
||||||
<Compile Include="ParameterBinding\IActionBindingContextProvider.cs" />
|
<Compile Include="ParameterBinding\IActionBindingContextProvider.cs" />
|
||||||
<Compile Include="ParameterDescriptor.cs" />
|
<Compile Include="ParameterDescriptor.cs" />
|
||||||
|
|
@ -166,7 +175,6 @@
|
||||||
<Compile Include="ReflectedActionInvokerProvider.cs" />
|
<Compile Include="ReflectedActionInvokerProvider.cs" />
|
||||||
<Compile Include="ReflectedModelBuilder\ReflectedParameterModel.cs" />
|
<Compile Include="ReflectedModelBuilder\ReflectedParameterModel.cs" />
|
||||||
<Compile Include="Rendering\CompositeViewEngine.cs" />
|
<Compile Include="Rendering\CompositeViewEngine.cs" />
|
||||||
<Compile Include="Rendering\DefaultViewEngineProvider.cs" />
|
|
||||||
<Compile Include="Rendering\DynamicViewData.cs" />
|
<Compile Include="Rendering\DynamicViewData.cs" />
|
||||||
<Compile Include="Rendering\Expressions\CachedExpressionCompiler.cs" />
|
<Compile Include="Rendering\Expressions\CachedExpressionCompiler.cs" />
|
||||||
<Compile Include="Rendering\Expressions\ExpressionHelper.cs" />
|
<Compile Include="Rendering\Expressions\ExpressionHelper.cs" />
|
||||||
|
|
@ -214,7 +222,6 @@
|
||||||
<Compile Include="Rendering\SelectListGroup.cs" />
|
<Compile Include="Rendering\SelectListGroup.cs" />
|
||||||
<Compile Include="Rendering\SelectListItem.cs" />
|
<Compile Include="Rendering\SelectListItem.cs" />
|
||||||
<Compile Include="Rendering\UnobtrusiveValidationAttributesGenerator.cs" />
|
<Compile Include="Rendering\UnobtrusiveValidationAttributesGenerator.cs" />
|
||||||
<Compile Include="Rendering\ViewEngineDescriptor.cs" />
|
|
||||||
<Compile Include="Rendering\RazorViewEngineOptions.cs" />
|
<Compile Include="Rendering\RazorViewEngineOptions.cs" />
|
||||||
<Compile Include="Rendering\ViewEngineResult.cs" />
|
<Compile Include="Rendering\ViewEngineResult.cs" />
|
||||||
<Compile Include="RouteAttribute.cs" />
|
<Compile Include="RouteAttribute.cs" />
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,8 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Microsoft.AspNet.Mvc.Core;
|
using Microsoft.AspNet.Mvc.Core;
|
||||||
using Microsoft.AspNet.Mvc.ModelBinding;
|
using Microsoft.AspNet.Mvc.OptionDescriptors;
|
||||||
using Microsoft.AspNet.Mvc.ReflectedModelBuilder;
|
using Microsoft.AspNet.Mvc.ReflectedModelBuilder;
|
||||||
using Microsoft.AspNet.Mvc.Rendering;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
|
|
@ -23,7 +22,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
ApplicationModelConventions = new List<IReflectedApplicationModelConvention>();
|
ApplicationModelConventions = new List<IReflectedApplicationModelConvention>();
|
||||||
ModelBinders = new List<ModelBinderDescriptor>();
|
ModelBinders = new List<ModelBinderDescriptor>();
|
||||||
ViewEngines = new List<ViewEngineDescriptor>();
|
ViewEngines = new List<ViewEngineDescriptor>();
|
||||||
ValueProviderFactories = new List<IValueProviderFactory>();
|
ValueProviderFactories = new List<ValueProviderFactoryDescriptor>();
|
||||||
OutputFormatters = new List<OutputFormatterDescriptor>();
|
OutputFormatters = new List<OutputFormatterDescriptor>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -86,9 +85,9 @@ namespace Microsoft.AspNet.Mvc
|
||||||
public List<ViewEngineDescriptor> ViewEngines { get; private set; }
|
public List<ViewEngineDescriptor> ViewEngines { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a list of <see cref="IValueProviderFactory"/> used by this application.
|
/// Gets a list of descriptors that represent <see cref="IValueProviderFactory"/> used by this application.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<IValueProviderFactory> ValueProviderFactories { get; private set; }
|
public List<ValueProviderFactoryDescriptor> ValueProviderFactories { get; private set; }
|
||||||
|
|
||||||
public List<IReflectedApplicationModelConvention> ApplicationModelConventions { get; private set; }
|
public List<IReflectedApplicationModelConvention> ApplicationModelConventions { get; private set; }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
// 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.ModelBinding;
|
||||||
|
using Microsoft.Framework.DependencyInjection;
|
||||||
|
using Microsoft.Framework.OptionsModel;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.OptionDescriptors
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public class DefaultModelBindersProvider : OptionDescriptorBasedProvider<IModelBinder>, IModelBinderProvider
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the DefaultModelBindersProvider class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="options">An accessor to the <see cref="MvcOptions"/> configured for this application.</param>
|
||||||
|
/// <param name="typeActivator">An <see cref="ITypeActivator"/> instance used to instantiate types.</param>
|
||||||
|
/// <param name="serviceProvider">A <see cref="IServiceProvider"/> instance that retrieves services from the
|
||||||
|
/// service collection.</param>
|
||||||
|
public DefaultModelBindersProvider(
|
||||||
|
IOptionsAccessor<MvcOptions> optionsAccessor,
|
||||||
|
ITypeActivator typeActivator,
|
||||||
|
IServiceProvider serviceProvider)
|
||||||
|
: base(optionsAccessor.Options.ModelBinders, typeActivator, serviceProvider)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public IReadOnlyList<IModelBinder> ModelBinders
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Options;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
// 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.ModelBinding;
|
||||||
|
using Microsoft.Framework.DependencyInjection;
|
||||||
|
using Microsoft.Framework.OptionsModel;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.OptionDescriptors
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public class DefaultValueProviderFactoryProvider :
|
||||||
|
OptionDescriptorBasedProvider<IValueProviderFactory>, IValueProviderFactoryProvider
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="DefaultValueProviderFactoryProvider"/> class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="options">An accessor to the <see cref="MvcOptions"/> configured for this application.</param>
|
||||||
|
/// <param name="typeActivator">An <see cref="ITypeActivator"/> instance used to instantiate types.</param>
|
||||||
|
/// <param name="serviceProvider">A <see cref="IServiceProvider"/> instance that retrieves services from the
|
||||||
|
/// service collection.</param>
|
||||||
|
public DefaultValueProviderFactoryProvider(
|
||||||
|
IOptionsAccessor<MvcOptions> optionsAccessor,
|
||||||
|
ITypeActivator typeActivator,
|
||||||
|
IServiceProvider serviceProvider)
|
||||||
|
: base(optionsAccessor.Options.ValueProviderFactories, typeActivator, serviceProvider)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public IReadOnlyList<IValueProviderFactory> ValueProviderFactories
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Options;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
// 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.Rendering;
|
||||||
|
using Microsoft.Framework.DependencyInjection;
|
||||||
|
using Microsoft.Framework.OptionsModel;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.OptionDescriptors
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public class DefaultViewEngineProvider : OptionDescriptorBasedProvider<IViewEngine>, IViewEngineProvider
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="DefaultViewEngineProvider"/> class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="options">An accessor to the <see cref="MvcOptions"/> configured for this application.</param>
|
||||||
|
/// <param name="typeActivator">An <see cref="ITypeActivator"/> instance used to instantiate types.</param>
|
||||||
|
/// <param name="serviceProvider">A <see cref="IServiceProvider"/> instance that retrieves services from the
|
||||||
|
/// service collection.</param>
|
||||||
|
public DefaultViewEngineProvider(
|
||||||
|
IOptionsAccessor<MvcOptions> optionsAccessor,
|
||||||
|
ITypeActivator typeActivator,
|
||||||
|
IServiceProvider serviceProvider)
|
||||||
|
: base(optionsAccessor.Options.ViewEngines, typeActivator, serviceProvider)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public IReadOnlyList<IViewEngine> ViewEngines
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Options;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
// 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 Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.OptionDescriptors
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Encapsulates information that describes an <see cref="IModelBinder"/>.
|
||||||
|
/// </summary>
|
||||||
|
public class ModelBinderDescriptor : OptionDescriptor<IModelBinder>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new instance of <see cref="ModelBinderDescriptor"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type">A type that represents a <see cref="IModelBinder"/>.
|
||||||
|
public ModelBinderDescriptor([NotNull] Type type)
|
||||||
|
: base(type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new instance of <see cref="ModelBinderDescriptor"/> with the specified instance.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="option">An instance of <see cref="IModelBinder"/>.
|
||||||
|
public ModelBinderDescriptor([NotNull] IModelBinder binder)
|
||||||
|
: base(binder)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,8 +3,10 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
|
using Microsoft.AspNet.Mvc.OptionDescriptors;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc.ModelBinding
|
namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Extension methods for adding model binders to a collection.
|
/// Extension methods for adding model binders to a collection.
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
// 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 Microsoft.AspNet.Mvc.Core;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.OptionDescriptors
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Encapsulates information that describes a <typeparamref name="TOption"/> option on <see cref="MvcOptions"/> .
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TOption">The type of the option.</typeparam>
|
||||||
|
public class OptionDescriptor<TOption>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new instance of <see cref="OptionDescriptor{TOption}"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type">A type that represents <typeparamref name="TOption"/>.
|
||||||
|
public OptionDescriptor([NotNull] Type type)
|
||||||
|
{
|
||||||
|
var optionType = typeof(TOption);
|
||||||
|
if (!optionType.IsAssignableFrom(type))
|
||||||
|
{
|
||||||
|
var message = Resources.FormatTypeMustDeriveFromType(type.FullName, optionType.FullName);
|
||||||
|
throw new ArgumentException(message, "type");
|
||||||
|
}
|
||||||
|
|
||||||
|
OptionType = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new instance of <see cref="OptionDescriptor{TOption}"/> with the specified instance.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="option">An instance of <typeparamref cref="TOption"/> that the descriptor represents.</param>
|
||||||
|
public OptionDescriptor([NotNull] TOption option)
|
||||||
|
{
|
||||||
|
Instance = option;
|
||||||
|
OptionType = option.GetType();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the type of the <typeparamref cref="TOption"/> described by this
|
||||||
|
/// <see cref="OptionDescriptor{TOption}"/>.
|
||||||
|
/// </summary>
|
||||||
|
public Type OptionType
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the instance of <typeparamref cref="TOption"/> described by this
|
||||||
|
/// <see cref="OptionDescriptor{TOption}"/>.
|
||||||
|
/// </summary>
|
||||||
|
public TOption Instance
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
// 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.Framework.DependencyInjection;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.OptionDescriptors
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Provides a default implementation for instantiating options from a sequence of
|
||||||
|
/// <see cref="OptionDescriptor{TOption}"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TOption">The type of the option.</typeparam>
|
||||||
|
public abstract class OptionDescriptorBasedProvider<TOption>
|
||||||
|
{
|
||||||
|
private readonly IEnumerable<OptionDescriptor<TOption>> _optionDescriptors;
|
||||||
|
private readonly ITypeActivator _typeActivator;
|
||||||
|
private readonly IServiceProvider _serviceProvider;
|
||||||
|
|
||||||
|
public OptionDescriptorBasedProvider(
|
||||||
|
[NotNull] IEnumerable<OptionDescriptor<TOption>> optionDescriptors,
|
||||||
|
[NotNull] ITypeActivator typeActivator,
|
||||||
|
[NotNull] IServiceProvider serviceProvider)
|
||||||
|
{
|
||||||
|
_optionDescriptors = optionDescriptors;
|
||||||
|
_typeActivator = typeActivator;
|
||||||
|
_serviceProvider = serviceProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets an activated sequence of <typeparamref name="TOption"/> instance.
|
||||||
|
/// </summary>
|
||||||
|
protected IReadOnlyList<TOption> Options
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var result = new List<TOption>();
|
||||||
|
foreach (var descriptor in _optionDescriptors)
|
||||||
|
{
|
||||||
|
var instance = descriptor.Instance;
|
||||||
|
if (instance == null)
|
||||||
|
{
|
||||||
|
instance = (TOption)_typeActivator.CreateInstance(_serviceProvider,
|
||||||
|
descriptor.OptionType);
|
||||||
|
}
|
||||||
|
|
||||||
|
result.Add(instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
// 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;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.OptionDescriptors
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Encapsulates information that describes an <see cref="OutputFormatter"/>.
|
||||||
|
/// </summary>
|
||||||
|
public class OutputFormatterDescriptor : OptionDescriptor<OutputFormatter>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new instance of <see cref="OutputFormatterDescriptor"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type">A <see cref="OutputFormatter/> type that the descriptor represents.
|
||||||
|
/// </param>
|
||||||
|
public OutputFormatterDescriptor([NotNull] Type type)
|
||||||
|
: base(type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new instance of <see cref="OutputFormatterDescriptor"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="outputFormatter">An instance of <see cref="OutputFormatter"/>
|
||||||
|
/// that the descriptor represents.</param>
|
||||||
|
public OutputFormatterDescriptor([NotNull] OutputFormatter outputFormatter)
|
||||||
|
: base(outputFormatter)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Microsoft.AspNet.Mvc.OptionDescriptors;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
|
|
@ -18,7 +19,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
/// <param name="outputFormatterType">Type representing an <see cref="OutputFormatter"/>.</param>
|
/// <param name="outputFormatterType">Type representing an <see cref="OutputFormatter"/>.</param>
|
||||||
/// <returns>OutputFormatterDescriptor representing the added instance.</returns>
|
/// <returns>OutputFormatterDescriptor representing the added instance.</returns>
|
||||||
public static OutputFormatterDescriptor Add([NotNull] this IList<OutputFormatterDescriptor> descriptors,
|
public static OutputFormatterDescriptor Add([NotNull] this IList<OutputFormatterDescriptor> descriptors,
|
||||||
[NotNull] Type outputFormatterType)
|
[NotNull] Type outputFormatterType)
|
||||||
{
|
{
|
||||||
var descriptor = new OutputFormatterDescriptor(outputFormatterType);
|
var descriptor = new OutputFormatterDescriptor(outputFormatterType);
|
||||||
descriptors.Add(descriptor);
|
descriptors.Add(descriptor);
|
||||||
|
|
@ -32,8 +33,8 @@ namespace Microsoft.AspNet.Mvc
|
||||||
/// <param name="outputFormatterType">Type representing an <see cref="OutputFormatter"/>.</param>
|
/// <param name="outputFormatterType">Type representing an <see cref="OutputFormatter"/>.</param>
|
||||||
/// <returns>OutputFormatterDescriptor representing the inserted instance.</returns>
|
/// <returns>OutputFormatterDescriptor representing the inserted instance.</returns>
|
||||||
public static OutputFormatterDescriptor Insert([NotNull] this IList<OutputFormatterDescriptor> descriptors,
|
public static OutputFormatterDescriptor Insert([NotNull] this IList<OutputFormatterDescriptor> descriptors,
|
||||||
int index,
|
int index,
|
||||||
[NotNull] Type outputFormatterType)
|
[NotNull] Type outputFormatterType)
|
||||||
{
|
{
|
||||||
if (index < 0 || index > descriptors.Count)
|
if (index < 0 || index > descriptors.Count)
|
||||||
{
|
{
|
||||||
|
|
@ -52,7 +53,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
/// <param name="outputFormatter">An <see cref="OutputFormatter"/> instance.</param>
|
/// <param name="outputFormatter">An <see cref="OutputFormatter"/> instance.</param>
|
||||||
/// <returns>OutputFormatterDescriptor representing the added instance.</returns>
|
/// <returns>OutputFormatterDescriptor representing the added instance.</returns>
|
||||||
public static OutputFormatterDescriptor Add([NotNull] this IList<OutputFormatterDescriptor> descriptors,
|
public static OutputFormatterDescriptor Add([NotNull] this IList<OutputFormatterDescriptor> descriptors,
|
||||||
[NotNull] OutputFormatter outputFormatter)
|
[NotNull] OutputFormatter outputFormatter)
|
||||||
{
|
{
|
||||||
var descriptor = new OutputFormatterDescriptor(outputFormatter);
|
var descriptor = new OutputFormatterDescriptor(outputFormatter);
|
||||||
descriptors.Add(descriptor);
|
descriptors.Add(descriptor);
|
||||||
|
|
@ -66,8 +67,8 @@ namespace Microsoft.AspNet.Mvc
|
||||||
/// <param name="outputFormatter">An <see cref="OutputFormatter"/> instance.</param>
|
/// <param name="outputFormatter">An <see cref="OutputFormatter"/> instance.</param>
|
||||||
/// <returns>OutputFormatterDescriptor representing the added instance.</returns>
|
/// <returns>OutputFormatterDescriptor representing the added instance.</returns>
|
||||||
public static OutputFormatterDescriptor Insert([NotNull] this IList<OutputFormatterDescriptor> descriptors,
|
public static OutputFormatterDescriptor Insert([NotNull] this IList<OutputFormatterDescriptor> descriptors,
|
||||||
int index,
|
int index,
|
||||||
[NotNull] OutputFormatter outputFormatter)
|
[NotNull] OutputFormatter outputFormatter)
|
||||||
{
|
{
|
||||||
if (index < 0 || index > descriptors.Count)
|
if (index < 0 || index > descriptors.Count)
|
||||||
{
|
{
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
// 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 Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.OptionDescriptors
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Encapsulates information that describes an <see cref="IValueProviderFactory"/>.
|
||||||
|
/// </summary>
|
||||||
|
public class ValueProviderFactoryDescriptor : OptionDescriptor<IValueProviderFactory>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new instance of <see cref="ValueProviderFactoryDescriptor"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type">The <see cref="IValueProviderFactory/> type that the descriptor represents.</param>
|
||||||
|
public ValueProviderFactoryDescriptor([NotNull] Type type)
|
||||||
|
: base(type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new instance of <see cref="ValueProviderFactoryDescriptor"/> using the specified type.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="valueProviderFactory">An instance of <see cref="IValueProviderFactory"/>
|
||||||
|
/// that the descriptor represents.</param>
|
||||||
|
public ValueProviderFactoryDescriptor([NotNull] IValueProviderFactory valueProviderFactory)
|
||||||
|
: base(valueProviderFactory)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,88 @@
|
||||||
|
// 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.ModelBinding;
|
||||||
|
using Microsoft.AspNet.Mvc.OptionDescriptors;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Extension methods for adding <see cref="IValueProviderFactory"/> to a descriptor collection.
|
||||||
|
/// </summary>
|
||||||
|
public static class ValueProviderFactoryDescriptorExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Adds a type representing a <see cref="IValueProviderFactory"/> to a descriptor collection.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="descriptors">A list of ValueProviderFactoryDescriptors</param>
|
||||||
|
/// <param name="valueProviderType">Type representing an <see cref="IValueProviderFactory"/>.</param>
|
||||||
|
/// <returns>ValueProviderFactoryDescriptor representing the added instance.</returns>
|
||||||
|
public static ValueProviderFactoryDescriptor Add(
|
||||||
|
[NotNull] this IList<ValueProviderFactoryDescriptor> descriptors,
|
||||||
|
[NotNull] Type valueProviderType)
|
||||||
|
{
|
||||||
|
var descriptor = new ValueProviderFactoryDescriptor(valueProviderType);
|
||||||
|
descriptors.Add(descriptor);
|
||||||
|
return descriptor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Inserts a type representing a <see cref="IValueProviderFactory"/> to a descriptor collection.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="descriptors">A list of ValueProviderFactoryDescriptors</param>
|
||||||
|
/// <param name="viewEngineType">Type representing an <see cref="IValueProviderFactory"/>.</param>
|
||||||
|
/// <returns>ValueProviderFactoryDescriptor representing the inserted instance.</returns>
|
||||||
|
public static ValueProviderFactoryDescriptor Insert(
|
||||||
|
[NotNull] this IList<ValueProviderFactoryDescriptor> descriptors,
|
||||||
|
int index,
|
||||||
|
[NotNull] Type viewEngineType)
|
||||||
|
{
|
||||||
|
if (index < 0 || index > descriptors.Count)
|
||||||
|
{
|
||||||
|
throw new ArgumentOutOfRangeException("index");
|
||||||
|
}
|
||||||
|
|
||||||
|
var descriptor = new ValueProviderFactoryDescriptor(viewEngineType);
|
||||||
|
descriptors.Insert(index, descriptor);
|
||||||
|
return descriptor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds an <see cref="IValueProviderFactory"/> to a descriptor collection.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="descriptors">A list of ValueProviderFactoryDescriptors</param>
|
||||||
|
/// <param name="valueProviderFactory">An <see cref="IValueProviderFactory"/> instance.</param>
|
||||||
|
/// <returns>ValueProviderFactoryDescriptor representing the added instance.</returns>
|
||||||
|
public static ValueProviderFactoryDescriptor Add(
|
||||||
|
[NotNull] this IList<ValueProviderFactoryDescriptor> descriptors,
|
||||||
|
[NotNull] IValueProviderFactory valueProviderFactory)
|
||||||
|
{
|
||||||
|
var descriptor = new ValueProviderFactoryDescriptor(valueProviderFactory);
|
||||||
|
descriptors.Add(descriptor);
|
||||||
|
return descriptor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Insert an <see cref="IValueProviderFactory"/> to a descriptor collection.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="descriptors">A list of ValueProviderFactoryDescriptors</param>
|
||||||
|
/// <param name="valueProviderFactory">An <see cref="IValueProviderFactory"/> instance.</param>
|
||||||
|
/// <returns>ValueProviderFactoryDescriptor representing the added instance.</returns>
|
||||||
|
public static ValueProviderFactoryDescriptor Insert(
|
||||||
|
[NotNull] this IList<ValueProviderFactoryDescriptor> descriptors,
|
||||||
|
int index,
|
||||||
|
[NotNull] IValueProviderFactory valueProviderFactory)
|
||||||
|
{
|
||||||
|
if (index < 0 || index > descriptors.Count)
|
||||||
|
{
|
||||||
|
throw new ArgumentOutOfRangeException("index");
|
||||||
|
}
|
||||||
|
|
||||||
|
var descriptor = new ValueProviderFactoryDescriptor(valueProviderFactory);
|
||||||
|
descriptors.Insert(index, descriptor);
|
||||||
|
return descriptor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
// 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 Microsoft.AspNet.Mvc.Rendering;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.OptionDescriptors
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Encapsulates information that describes an <see cref="IViewEngine"/>.
|
||||||
|
/// </summary>
|
||||||
|
public class ViewEngineDescriptor : OptionDescriptor<IViewEngine>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new instance of <see cref="ViewEngineDescriptor"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type">The <see cref="IViewEngine/> type that the descriptor represents.</param>
|
||||||
|
public ViewEngineDescriptor([NotNull] Type type)
|
||||||
|
: base(type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new instance of <see cref="ViewEngineDescriptor"/> using the specified type.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="viewEngine">An instance of <see cref="IViewEngine"/> that the descriptor represents.</param>
|
||||||
|
public ViewEngineDescriptor([NotNull] IViewEngine viewEngine)
|
||||||
|
: base(viewEngine)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,12 +3,13 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Microsoft.AspNet.Mvc.OptionDescriptors;
|
||||||
using Microsoft.AspNet.Mvc.Rendering;
|
using Microsoft.AspNet.Mvc.Rendering;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Extension methods for adding model binders to a collection.
|
/// Extension methods for adding view engines to a descriptor collection.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class ViewEngineDescriptorExtensions
|
public static class ViewEngineDescriptorExtensions
|
||||||
{
|
{
|
||||||
|
|
@ -3,10 +3,8 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.Mvc.ModelBinding;
|
using Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
using Microsoft.Framework.OptionsModel;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
|
|
@ -14,20 +12,20 @@ namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
private readonly IModelMetadataProvider _modelMetadataProvider;
|
private readonly IModelMetadataProvider _modelMetadataProvider;
|
||||||
private readonly ICompositeModelBinder _compositeModelBinder;
|
private readonly ICompositeModelBinder _compositeModelBinder;
|
||||||
private readonly IEnumerable<IValueProviderFactory> _valueProviderFactories;
|
private readonly IValueProviderFactory _compositeValueProviderFactory;
|
||||||
private readonly IInputFormatterProvider _inputFormatterProvider;
|
private readonly IInputFormatterProvider _inputFormatterProvider;
|
||||||
private readonly IEnumerable<IModelValidatorProvider> _validatorProviders;
|
private readonly IEnumerable<IModelValidatorProvider> _validatorProviders;
|
||||||
private Tuple<ActionContext, ActionBindingContext> _bindingContext;
|
private Tuple<ActionContext, ActionBindingContext> _bindingContext;
|
||||||
|
|
||||||
public DefaultActionBindingContextProvider(IModelMetadataProvider modelMetadataProvider,
|
public DefaultActionBindingContextProvider(IModelMetadataProvider modelMetadataProvider,
|
||||||
ICompositeModelBinder compositeModelBinder,
|
ICompositeModelBinder compositeModelBinder,
|
||||||
IOptionsAccessor<MvcOptions> mvcOptionsAccessor,
|
ICompositeValueProviderFactory compositeValueProviderFactory,
|
||||||
IInputFormatterProvider inputFormatterProvider,
|
IInputFormatterProvider inputFormatterProvider,
|
||||||
IEnumerable<IModelValidatorProvider> validatorProviders)
|
IEnumerable<IModelValidatorProvider> validatorProviders)
|
||||||
{
|
{
|
||||||
_modelMetadataProvider = modelMetadataProvider;
|
_modelMetadataProvider = modelMetadataProvider;
|
||||||
_compositeModelBinder = compositeModelBinder;
|
_compositeModelBinder = compositeModelBinder;
|
||||||
_valueProviderFactories = mvcOptionsAccessor.Options.ValueProviderFactories;
|
_compositeValueProviderFactory = compositeValueProviderFactory;
|
||||||
_inputFormatterProvider = inputFormatterProvider;
|
_inputFormatterProvider = inputFormatterProvider;
|
||||||
_validatorProviders = validatorProviders;
|
_validatorProviders = validatorProviders;
|
||||||
}
|
}
|
||||||
|
|
@ -46,14 +44,13 @@ namespace Microsoft.AspNet.Mvc
|
||||||
actionContext.HttpContext,
|
actionContext.HttpContext,
|
||||||
actionContext.RouteData.Values);
|
actionContext.RouteData.Values);
|
||||||
|
|
||||||
var valueProviders = _valueProviderFactories.Select(factory => factory.GetValueProvider(factoryContext))
|
var valueProvider = _compositeValueProviderFactory.GetValueProvider(factoryContext);
|
||||||
.Where(vp => vp != null);
|
|
||||||
|
|
||||||
var context = new ActionBindingContext(
|
var context = new ActionBindingContext(
|
||||||
actionContext,
|
actionContext,
|
||||||
_modelMetadataProvider,
|
_modelMetadataProvider,
|
||||||
_compositeModelBinder,
|
_compositeModelBinder,
|
||||||
new CompositeValueProvider(valueProviders),
|
valueProvider,
|
||||||
_inputFormatterProvider,
|
_inputFormatterProvider,
|
||||||
_validatorProviders);
|
_validatorProviders);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,57 +0,0 @@
|
||||||
// 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 System.Linq;
|
|
||||||
using Microsoft.AspNet.Mvc.ModelBinding;
|
|
||||||
using Microsoft.Framework.DependencyInjection;
|
|
||||||
using Microsoft.Framework.OptionsModel;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
|
||||||
{
|
|
||||||
/// <inheritdoc />
|
|
||||||
public class DefaultModelBindersProvider : IModelBindersProvider
|
|
||||||
{
|
|
||||||
private readonly List<ModelBinderDescriptor> _descriptors;
|
|
||||||
private readonly ITypeActivator _typeActivator;
|
|
||||||
private readonly IServiceProvider _serviceProvider;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the DefaultModelBindersProvider class.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="options">An accessor to the <see cref="MvcOptions"/> configured for this application.</param>
|
|
||||||
/// <param name="typeActivator">An <see cref="ITypeActivator"/> instance used to instantiate types.</param>
|
|
||||||
/// <param name="serviceProvider">A <see cref="IServiceProvider"/> instance that retrieves services from the
|
|
||||||
/// service collection.</param>
|
|
||||||
public DefaultModelBindersProvider(IOptionsAccessor<MvcOptions> options,
|
|
||||||
ITypeActivator typeActivator,
|
|
||||||
IServiceProvider serviceProvider)
|
|
||||||
{
|
|
||||||
_descriptors = options.Options.ModelBinders;
|
|
||||||
_typeActivator = typeActivator;
|
|
||||||
_serviceProvider = serviceProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public IReadOnlyList<IModelBinder> ModelBinders
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var binders = new List<IModelBinder>();
|
|
||||||
foreach (var descriptor in _descriptors)
|
|
||||||
{
|
|
||||||
var binder = descriptor.ModelBinder;
|
|
||||||
if (binder == null)
|
|
||||||
{
|
|
||||||
binder = (IModelBinder)_typeActivator.CreateInstance(_serviceProvider,
|
|
||||||
descriptor.ModelBinderType);
|
|
||||||
}
|
|
||||||
|
|
||||||
binders.Add(binder);
|
|
||||||
}
|
|
||||||
return binders;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
||||||
// 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.Framework.DependencyInjection;
|
|
||||||
using Microsoft.Framework.OptionsModel;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc.Rendering
|
|
||||||
{
|
|
||||||
/// <inheritdoc />
|
|
||||||
public class DefaultViewEngineProvider : IViewEngineProvider
|
|
||||||
{
|
|
||||||
private readonly IList<ViewEngineDescriptor> _descriptors;
|
|
||||||
private readonly ITypeActivator _typeActivator;
|
|
||||||
private readonly IServiceProvider _serviceProvider;
|
|
||||||
|
|
||||||
public DefaultViewEngineProvider(
|
|
||||||
ITypeActivator typeActivator,
|
|
||||||
IServiceProvider serviceProvider,
|
|
||||||
IOptionsAccessor<MvcOptions> options)
|
|
||||||
{
|
|
||||||
_typeActivator = typeActivator;
|
|
||||||
_serviceProvider = serviceProvider;
|
|
||||||
_descriptors = options.Options.ViewEngines;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public IReadOnlyList<IViewEngine> ViewEngines
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
var viewEngines = new List<IViewEngine>(_descriptors.Count);
|
|
||||||
foreach (var descriptor in _descriptors)
|
|
||||||
{
|
|
||||||
var viewEngine = descriptor.ViewEngine;
|
|
||||||
if (viewEngine == null)
|
|
||||||
{
|
|
||||||
viewEngine = (IViewEngine)_typeActivator.CreateInstance(_serviceProvider,
|
|
||||||
descriptor.ViewEngineType);
|
|
||||||
}
|
|
||||||
|
|
||||||
viewEngines.Add(viewEngine);
|
|
||||||
}
|
|
||||||
|
|
||||||
return viewEngines;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,58 +0,0 @@
|
||||||
// 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 Microsoft.AspNet.Mvc.Core;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc.Rendering
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Encapsulates information that describes an <see cref="IViewEngine"/>.
|
|
||||||
/// </summary>
|
|
||||||
public class ViewEngineDescriptor
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new instance of <see cref="ViewEngineDescriptor"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="type">The <see cref="IViewEngine/> type that the descriptor represents.</param>
|
|
||||||
public ViewEngineDescriptor([NotNull] Type type)
|
|
||||||
{
|
|
||||||
var viewEngineType = typeof(IViewEngine);
|
|
||||||
if (!viewEngineType.IsAssignableFrom(type))
|
|
||||||
{
|
|
||||||
var message = Resources.FormatTypeMustDeriveFromType(type.FullName, viewEngineType.FullName);
|
|
||||||
throw new ArgumentException(message, "type");
|
|
||||||
}
|
|
||||||
|
|
||||||
ViewEngineType = type;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new instance of <see cref="ViewEngineDescriptor"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="viewEngine">An instance of <see cref="IViewEngine"/> that the descriptor represents.</param>
|
|
||||||
public ViewEngineDescriptor([NotNull] IViewEngine viewEngine)
|
|
||||||
{
|
|
||||||
ViewEngine = viewEngine;
|
|
||||||
ViewEngineType = viewEngine.GetType();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the type of the <see cref="IViewEngine"/>.
|
|
||||||
/// </summary>
|
|
||||||
public Type ViewEngineType
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
private set;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the instance of the <see cref="IViewEngine"/>.
|
|
||||||
/// </summary>
|
|
||||||
public IViewEngine ViewEngine
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
private set;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -16,14 +16,14 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
public class CompositeModelBinder : ICompositeModelBinder
|
public class CompositeModelBinder : ICompositeModelBinder
|
||||||
{
|
{
|
||||||
private readonly IModelBindersProvider _modelBindersProvider;
|
private readonly IModelBinderProvider _modelBindersProvider;
|
||||||
private IReadOnlyList<IModelBinder> _binders;
|
private IReadOnlyList<IModelBinder> _binders;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the CompositeModelBinder class.
|
/// Initializes a new instance of the CompositeModelBinder class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="modelBindersProvider">Provides a collection of <see cref="IModelBinder"/> instances.</param>
|
/// <param name="modelBindersProvider">Provides a collection of <see cref="IModelBinder"/> instances.</param>
|
||||||
public CompositeModelBinder(IModelBindersProvider modelBindersProvider)
|
public CompositeModelBinder(IModelBinderProvider modelBindersProvider)
|
||||||
{
|
{
|
||||||
_modelBindersProvider = modelBindersProvider;
|
_modelBindersProvider = modelBindersProvider;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Provides an activated collection of <see cref="IModelBinder"/> instances.
|
/// Provides an activated collection of <see cref="IModelBinder"/> instances.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IModelBindersProvider
|
public interface IModelBinderProvider
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a collection of activated ModelBinders instances.
|
/// Gets a collection of activated ModelBinders instances.
|
||||||
|
|
@ -1,57 +0,0 @@
|
||||||
// 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;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc.ModelBinding
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Encapsulates information that describes an <see cref="IModelBinder"/>.
|
|
||||||
/// </summary>
|
|
||||||
public class ModelBinderDescriptor
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new instance of <see cref="ModelBinderDescriptor"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="modelBinderType">A <see cref="IModelBinder/> type that the descriptor represents.</param>
|
|
||||||
public ModelBinderDescriptor([NotNull] Type modelBinderType)
|
|
||||||
{
|
|
||||||
var binderType = typeof(IModelBinder);
|
|
||||||
if (!binderType.IsAssignableFrom(modelBinderType))
|
|
||||||
{
|
|
||||||
var message = Resources.FormatTypeMustDeriveFromType(modelBinderType, binderType.FullName);
|
|
||||||
throw new ArgumentException(message, "modelBinderType");
|
|
||||||
}
|
|
||||||
|
|
||||||
ModelBinderType = modelBinderType;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Creates a new instance of <see cref="ModelBinderDescriptor"/>.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="modelBinder">An instance of <see cref="IModelBinder"/> that the descriptor represents.</param>
|
|
||||||
public ModelBinderDescriptor([NotNull] IModelBinder modelBinder)
|
|
||||||
{
|
|
||||||
ModelBinder = modelBinder;
|
|
||||||
ModelBinderType = modelBinder.GetType();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the type of the <see cref="IModelBinder"/>.
|
|
||||||
/// </summary>
|
|
||||||
public Type ModelBinderType
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
private set;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the instance of the <see cref="IModelBinder"/>.
|
|
||||||
/// </summary>
|
|
||||||
public IModelBinder ModelBinder
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
private set;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -35,10 +35,8 @@
|
||||||
<Compile Include="Binders\GenericModelBinder.cs" />
|
<Compile Include="Binders\GenericModelBinder.cs" />
|
||||||
<Compile Include="Binders\ICompositeModelBinder.cs" />
|
<Compile Include="Binders\ICompositeModelBinder.cs" />
|
||||||
<Compile Include="Binders\IModelBinder.cs" />
|
<Compile Include="Binders\IModelBinder.cs" />
|
||||||
<Compile Include="Binders\IModelBindersProvider.cs" />
|
<Compile Include="Binders\IModelBinderProvider.cs" />
|
||||||
<Compile Include="Binders\KeyValuePairModelBinder.cs" />
|
<Compile Include="Binders\KeyValuePairModelBinder.cs" />
|
||||||
<Compile Include="Binders\ModelBinderDescriptor.cs" />
|
|
||||||
<Compile Include="Binders\ModelBinderDescriptorExtensions.cs" />
|
|
||||||
<Compile Include="Binders\MutableObjectModelBinder.cs" />
|
<Compile Include="Binders\MutableObjectModelBinder.cs" />
|
||||||
<Compile Include="Binders\TypeConverterModelBinder.cs" />
|
<Compile Include="Binders\TypeConverterModelBinder.cs" />
|
||||||
<Compile Include="Binders\TypeMatchModelBinder.cs" />
|
<Compile Include="Binders\TypeMatchModelBinder.cs" />
|
||||||
|
|
@ -110,11 +108,14 @@
|
||||||
<Compile Include="Validation\RequiredMemberModelValidator.cs" />
|
<Compile Include="Validation\RequiredMemberModelValidator.cs" />
|
||||||
<Compile Include="Validation\ValidatableObjectAdapter.cs" />
|
<Compile Include="Validation\ValidatableObjectAdapter.cs" />
|
||||||
<Compile Include="ValueProviders\CompositeValueProvider.cs" />
|
<Compile Include="ValueProviders\CompositeValueProvider.cs" />
|
||||||
|
<Compile Include="ValueProviders\CompositeValueProviderFactory.cs" />
|
||||||
<Compile Include="ValueProviders\DictionaryBasedValueProvider.cs" />
|
<Compile Include="ValueProviders\DictionaryBasedValueProvider.cs" />
|
||||||
<Compile Include="ValueProviders\ElementalValueProvider.cs" />
|
<Compile Include="ValueProviders\ElementalValueProvider.cs" />
|
||||||
<Compile Include="ValueProviders\FormValueProviderFactory.cs" />
|
<Compile Include="ValueProviders\FormValueProviderFactory.cs" />
|
||||||
|
<Compile Include="ValueProviders\ICompositeValueProviderFactory.cs" />
|
||||||
<Compile Include="ValueProviders\IEnumerableValueProvider.cs" />
|
<Compile Include="ValueProviders\IEnumerableValueProvider.cs" />
|
||||||
<Compile Include="ValueProviders\IValueProviderFactory.cs" />
|
<Compile Include="ValueProviders\IValueProviderFactory.cs" />
|
||||||
|
<Compile Include="ValueProviders\IValueProviderFactoryProvider.cs" />
|
||||||
<Compile Include="ValueProviders\IValueProviders.cs" />
|
<Compile Include="ValueProviders\IValueProviders.cs" />
|
||||||
<Compile Include="ValueProviders\QueryStringValueProviderFactory.cs" />
|
<Compile Include="ValueProviders\QueryStringValueProviderFactory.cs" />
|
||||||
<Compile Include="ValueProviders\ReadableStringCollectionValueProvider.cs" />
|
<Compile Include="ValueProviders\ReadableStringCollectionValueProvider.cs" />
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
// 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 System.Linq;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.ModelBinding
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public class CompositeValueProviderFactory : ICompositeValueProviderFactory
|
||||||
|
{
|
||||||
|
private readonly IReadOnlyList<IValueProviderFactory> _valueProviderFactories;
|
||||||
|
|
||||||
|
public CompositeValueProviderFactory(IValueProviderFactoryProvider valueProviderFactoryProvider)
|
||||||
|
{
|
||||||
|
_valueProviderFactories = valueProviderFactoryProvider.ValueProviderFactories;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public IValueProvider GetValueProvider([NotNull] ValueProviderFactoryContext context)
|
||||||
|
{
|
||||||
|
var valueProviders = _valueProviderFactories.Select(factory => factory.GetValueProvider(context))
|
||||||
|
.Where(vp => vp != null);
|
||||||
|
|
||||||
|
return new CompositeValueProvider(valueProviders);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.ModelBinding
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Represents an aggregate of <see cref="IValueProviderFactory"/>.
|
||||||
|
/// </summary>
|
||||||
|
public interface ICompositeValueProviderFactory : IValueProviderFactory
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.ModelBinding
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Provides an activated collection of <see cref="IValueProviderFactory"/> instances.
|
||||||
|
/// </summary>
|
||||||
|
public interface IValueProviderFactoryProvider
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a collection of activated IValueProviderFactory instances.
|
||||||
|
/// </summary>
|
||||||
|
IReadOnlyList<IValueProviderFactory> ValueProviderFactories { get; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -38,8 +38,8 @@ namespace Microsoft.AspNet.Mvc
|
||||||
options.ValueProviderFactories.Add(new FormValueProviderFactory());
|
options.ValueProviderFactories.Add(new FormValueProviderFactory());
|
||||||
|
|
||||||
// Set up OutputFormatters
|
// Set up OutputFormatters
|
||||||
options.OutputFormatters.Add(new OutputFormatterDescriptor(
|
options.OutputFormatters.Add(
|
||||||
new JsonOutputFormatter(JsonOutputFormatter.CreateDefaultSettings(), indent: false)));
|
new JsonOutputFormatter(JsonOutputFormatter.CreateDefaultSettings(), indent: false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -5,6 +5,7 @@ using System.Collections.Generic;
|
||||||
using Microsoft.AspNet.Mvc.Core;
|
using Microsoft.AspNet.Mvc.Core;
|
||||||
using Microsoft.AspNet.Mvc.Filters;
|
using Microsoft.AspNet.Mvc.Filters;
|
||||||
using Microsoft.AspNet.Mvc.ModelBinding;
|
using Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
|
using Microsoft.AspNet.Mvc.OptionDescriptors;
|
||||||
using Microsoft.AspNet.Mvc.Razor;
|
using Microsoft.AspNet.Mvc.Razor;
|
||||||
using Microsoft.AspNet.Mvc.Razor.Compilation;
|
using Microsoft.AspNet.Mvc.Razor.Compilation;
|
||||||
using Microsoft.AspNet.Mvc.Rendering;
|
using Microsoft.AspNet.Mvc.Rendering;
|
||||||
|
|
@ -63,8 +64,10 @@ namespace Microsoft.AspNet.Mvc
|
||||||
yield return describe.Transient<IInputFormatter, JsonInputFormatter>();
|
yield return describe.Transient<IInputFormatter, JsonInputFormatter>();
|
||||||
yield return describe.Transient<IInputFormatterProvider, TempInputFormatterProvider>();
|
yield return describe.Transient<IInputFormatterProvider, TempInputFormatterProvider>();
|
||||||
|
|
||||||
yield return describe.Transient<IModelBindersProvider, DefaultModelBindersProvider>();
|
yield return describe.Transient<IModelBinderProvider, DefaultModelBindersProvider>();
|
||||||
yield return describe.Transient<ICompositeModelBinder, CompositeModelBinder>();
|
yield return describe.Scoped<ICompositeModelBinder, CompositeModelBinder>();
|
||||||
|
yield return describe.Transient<IValueProviderFactoryProvider, DefaultValueProviderFactoryProvider>();
|
||||||
|
yield return describe.Scoped<ICompositeValueProviderFactory, CompositeValueProviderFactory>();
|
||||||
|
|
||||||
yield return describe.Transient<INestedProvider<FilterProviderContext>, DefaultFilterProvider>();
|
yield return describe.Transient<INestedProvider<FilterProviderContext>, DefaultFilterProvider>();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,11 +30,19 @@
|
||||||
<Compile Include="ActionResults\RedirectResultTest.cs" />
|
<Compile Include="ActionResults\RedirectResultTest.cs" />
|
||||||
<Compile Include="DefaultActionDiscoveryConventionsActionSelectionTests.cs" />
|
<Compile Include="DefaultActionDiscoveryConventionsActionSelectionTests.cs" />
|
||||||
<Compile Include="AntiXsrf\AntiForgeryOptionsTests.cs" />
|
<Compile Include="AntiXsrf\AntiForgeryOptionsTests.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\DefaultModelBindersProviderTest.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\DefaultValueProviderFactoryProviderTest.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\DefaultViewEngineProviderTest.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\ModelBinderDescriptorExtensionsTest.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\ModelBinderDescriptorTest.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\OutputFormatterDescriptorExtensionTest.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\OutputFormatterDescriptorTest.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\ValueProviderFactoryDescriptorTest.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\ViewEngineDescriptorTest.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\ValueProviderFactoryDescriptorExtensionsTest.cs" />
|
||||||
|
<Compile Include="OptionDescriptors\ViewEngineDscriptorExtensionsTest.cs" />
|
||||||
<Compile Include="ExpiringFileInfoCacheTest.cs" />
|
<Compile Include="ExpiringFileInfoCacheTest.cs" />
|
||||||
<Compile Include="DefaultActionDiscoveryConventionsTests.cs" />
|
<Compile Include="DefaultActionDiscoveryConventionsTests.cs" />
|
||||||
<Compile Include="Extensions\ViewEngineDscriptorExtensionsTest.cs" />
|
|
||||||
<Compile Include="Formatters\OutputFormatterDescriptorExtensionTest.cs" />
|
|
||||||
<Compile Include="Formatters\OutputFormatterDescriptorTest.cs" />
|
|
||||||
<Compile Include="Formatters\OutputFormatterTests.cs" />
|
<Compile Include="Formatters\OutputFormatterTests.cs" />
|
||||||
<Compile Include="ReflectedModelBuilder\ReflectedParameterModelTests.cs" />
|
<Compile Include="ReflectedModelBuilder\ReflectedParameterModelTests.cs" />
|
||||||
<Compile Include="ReflectedModelBuilder\ReflectedActionModelTests.cs" />
|
<Compile Include="ReflectedModelBuilder\ReflectedActionModelTests.cs" />
|
||||||
|
|
@ -61,7 +69,6 @@
|
||||||
<Compile Include="DefaultControllerFactoryTest.cs" />
|
<Compile Include="DefaultControllerFactoryTest.cs" />
|
||||||
<Compile Include="Filters\ResultFilterAttributeTest.cs" />
|
<Compile Include="Filters\ResultFilterAttributeTest.cs" />
|
||||||
<Compile Include="JsonResultTest.cs" />
|
<Compile Include="JsonResultTest.cs" />
|
||||||
<Compile Include="ParameterBinding\DefaultModelBindersProviderTest.cs" />
|
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="PropertyHelperTest.cs" />
|
<Compile Include="PropertyHelperTest.cs" />
|
||||||
<Compile Include="ReflectedActionDescriptorProviderTests.cs" />
|
<Compile Include="ReflectedActionDescriptorProviderTests.cs" />
|
||||||
|
|
@ -77,8 +84,6 @@
|
||||||
<Compile Include="Rendering\ViewContextTests.cs" />
|
<Compile Include="Rendering\ViewContextTests.cs" />
|
||||||
<Compile Include="Rendering\ViewDataOfTTest.cs" />
|
<Compile Include="Rendering\ViewDataOfTTest.cs" />
|
||||||
<Compile Include="KnownRouteValueConstraintTests.cs" />
|
<Compile Include="KnownRouteValueConstraintTests.cs" />
|
||||||
<Compile Include="Rendering\ViewEngineDescriptorTest.cs" />
|
|
||||||
<Compile Include="Rendering\DefaultViewEngineProviderTest.cs" />
|
|
||||||
<Compile Include="Routing\AttributeRoutePrecedenceTests.cs" />
|
<Compile Include="Routing\AttributeRoutePrecedenceTests.cs" />
|
||||||
<Compile Include="Routing\AttributeRouteTemplateTests.cs" />
|
<Compile Include="Routing\AttributeRouteTemplateTests.cs" />
|
||||||
<Compile Include="StaticControllerAssemblyProvider.cs" />
|
<Compile Include="StaticControllerAssemblyProvider.cs" />
|
||||||
|
|
@ -91,4 +96,4 @@
|
||||||
<Compile Include="ViewComponentTests.cs" />
|
<Compile Include="ViewComponentTests.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VSToolsPath)\AspNet\Microsoft.Web.AspNet.targets" Condition="'$(VSToolsPath)' != ''" />
|
<Import Project="$(VSToolsPath)\AspNet\Microsoft.Web.AspNet.targets" Condition="'$(VSToolsPath)' != ''" />
|
||||||
</Project>
|
</Project>
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
// 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.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
#if NET45
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.Mvc.ModelBinding;
|
using Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
using Microsoft.Framework.DependencyInjection;
|
using Microsoft.Framework.DependencyInjection;
|
||||||
using Microsoft.Framework.OptionsModel;
|
using Microsoft.Framework.OptionsModel;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc.Core
|
namespace Microsoft.AspNet.Mvc.OptionDescriptors
|
||||||
{
|
{
|
||||||
public class DefaultModelBindersProviderTest
|
public class DefaultModelBindersProviderTest
|
||||||
{
|
{
|
||||||
|
|
@ -17,21 +17,20 @@ namespace Microsoft.AspNet.Mvc.Core
|
||||||
public void DefaultModelBindersProvider_ProvidesInstancesOfModelBinders()
|
public void DefaultModelBindersProvider_ProvidesInstancesOfModelBinders()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
|
var service = Mock.Of<ITestService>();
|
||||||
var binder = new TypeMatchModelBinder();
|
var binder = new TypeMatchModelBinder();
|
||||||
var options = new MvcOptions();
|
var options = new MvcOptions();
|
||||||
options.ModelBinders.Clear();
|
|
||||||
options.ModelBinders.Add(binder);
|
options.ModelBinders.Add(binder);
|
||||||
options.ModelBinders.Add(typeof(GenericModelBinder));
|
options.ModelBinders.Add(typeof(TestModelBinder));
|
||||||
var optionsAccessor = new Mock<IOptionsAccessor<MvcOptions>>();
|
var optionsAccessor = new Mock<IOptionsAccessor<MvcOptions>>();
|
||||||
optionsAccessor.SetupGet(o => o.Options)
|
optionsAccessor.SetupGet(o => o.Options)
|
||||||
.Returns(options);
|
.Returns(options);
|
||||||
var activator = new Mock<ITypeActivator>();
|
var activator = new TypeActivator();
|
||||||
var serviceProvider = Mock.Of<IServiceProvider>();
|
var serviceProvider = new Mock<IServiceProvider>();
|
||||||
activator.Setup(a => a.CreateInstance(serviceProvider, typeof(GenericModelBinder)))
|
serviceProvider.Setup(p => p.GetService(typeof(ITestService)))
|
||||||
.Returns(new GenericModelBinder(serviceProvider, activator.Object))
|
.Returns(service);
|
||||||
.Verifiable();
|
|
||||||
|
|
||||||
var provider = new DefaultModelBindersProvider(optionsAccessor.Object, activator.Object, serviceProvider);
|
var provider = new DefaultModelBindersProvider(optionsAccessor.Object, activator, serviceProvider.Object);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var binders = provider.ModelBinders;
|
var binders = provider.ModelBinders;
|
||||||
|
|
@ -39,8 +38,27 @@ namespace Microsoft.AspNet.Mvc.Core
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(2, binders.Count);
|
Assert.Equal(2, binders.Count);
|
||||||
Assert.Same(binder, binders[0]);
|
Assert.Same(binder, binders[0]);
|
||||||
Assert.IsType<GenericModelBinder>(binders[1]);
|
var testModelBinder = Assert.IsType<TestModelBinder>(binders[1]);
|
||||||
|
Assert.Same(service, testModelBinder.Service);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class TestModelBinder : IModelBinder
|
||||||
|
{
|
||||||
|
public TestModelBinder(ITestService service)
|
||||||
|
{
|
||||||
|
Service = service;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ITestService Service { get; private set; }
|
||||||
|
|
||||||
|
public Task<bool> BindModelAsync(ModelBindingContext bindingContext)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface ITestService
|
||||||
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
// 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 Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
|
using Microsoft.Framework.DependencyInjection;
|
||||||
|
using Microsoft.Framework.OptionsModel;
|
||||||
|
using Moq;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.OptionDescriptors
|
||||||
|
{
|
||||||
|
public class DefaultValueProviderFactoryProviderTest
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void ViewEngine_ReturnsInstantiatedListOfViewEngines()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var service = Mock.Of<ITestService>();
|
||||||
|
var valueProviderFactory = Mock.Of<IValueProviderFactory>();
|
||||||
|
var type = typeof(TestValueProviderFactory);
|
||||||
|
var typeActivator = new TypeActivator();
|
||||||
|
var serviceProvider = new Mock<IServiceProvider>();
|
||||||
|
serviceProvider.Setup(p => p.GetService(typeof(ITestService)))
|
||||||
|
.Returns(service);
|
||||||
|
var options = new MvcOptions();
|
||||||
|
options.ValueProviderFactories.Add(valueProviderFactory);
|
||||||
|
options.ValueProviderFactories.Add(type);
|
||||||
|
var accessor = new Mock<IOptionsAccessor<MvcOptions>>();
|
||||||
|
accessor.SetupGet(a => a.Options)
|
||||||
|
.Returns(options);
|
||||||
|
var provider = new DefaultValueProviderFactoryProvider(accessor.Object,
|
||||||
|
typeActivator,
|
||||||
|
serviceProvider.Object);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var result = provider.ValueProviderFactories;
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal(2, result.Count);
|
||||||
|
Assert.Same(valueProviderFactory, result[0]);
|
||||||
|
var testValueProviderFactory = Assert.IsType<TestValueProviderFactory>(result[1]);
|
||||||
|
Assert.Same(service, testValueProviderFactory.Service);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class TestValueProviderFactory : IValueProviderFactory
|
||||||
|
{
|
||||||
|
public TestValueProviderFactory(ITestService service)
|
||||||
|
{
|
||||||
|
Service = service;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ITestService Service { get; private set; }
|
||||||
|
|
||||||
|
public IValueProvider GetValueProvider(ValueProviderFactoryContext context)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface ITestService
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,15 +1,14 @@
|
||||||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
// 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.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
#if NET45
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using Microsoft.AspNet.Mvc.Rendering;
|
||||||
using Microsoft.Framework.DependencyInjection;
|
using Microsoft.Framework.DependencyInjection;
|
||||||
using Microsoft.Framework.OptionsModel;
|
using Microsoft.Framework.OptionsModel;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc.Rendering
|
namespace Microsoft.AspNet.Mvc.OptionDescriptors
|
||||||
{
|
{
|
||||||
public class DefaultViewEngineProviderTest
|
public class DefaultViewEngineProviderTest
|
||||||
{
|
{
|
||||||
|
|
@ -30,7 +29,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
||||||
var accessor = new Mock<IOptionsAccessor<MvcOptions>>();
|
var accessor = new Mock<IOptionsAccessor<MvcOptions>>();
|
||||||
accessor.SetupGet(a => a.Options)
|
accessor.SetupGet(a => a.Options)
|
||||||
.Returns(options);
|
.Returns(options);
|
||||||
var provider = new DefaultViewEngineProvider(typeActivator, serviceProvider.Object, accessor.Object);
|
var provider = new DefaultViewEngineProvider(accessor.Object, typeActivator, serviceProvider.Object);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = provider.ViewEngines;
|
var result = provider.ViewEngines;
|
||||||
|
|
@ -67,4 +66,3 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
@ -1,13 +1,14 @@
|
||||||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
// 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.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
#if NET45
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
|
using Microsoft.AspNet.Mvc.OptionDescriptors;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc.ModelBinding
|
namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
public class ModelBinderDescriptorExtensionTest
|
public class ModelBinderDescriptorExtensionTest
|
||||||
{
|
{
|
||||||
|
|
@ -62,11 +63,10 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(4, collection.Count);
|
Assert.Equal(4, collection.Count);
|
||||||
Assert.Equal(binder1, collection[0].ModelBinder);
|
Assert.Equal(binder1, collection[0].Instance);
|
||||||
Assert.Equal(binder2, collection[1].ModelBinder);
|
Assert.Equal(binder2, collection[1].Instance);
|
||||||
Assert.Equal(type2, collection[2].ModelBinderType);
|
Assert.Equal(type2, collection[2].OptionType);
|
||||||
Assert.Equal(type1, collection[3].ModelBinderType);
|
Assert.Equal(type1, collection[3].OptionType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
// 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.Threading.Tasks;
|
||||||
|
using Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
|
using Microsoft.AspNet.Testing;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.OptionDescriptors
|
||||||
|
{
|
||||||
|
public class ModelBinderDescriptorTest
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void ConstructorThrows_IfTypeIsNotIModelBinder()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var expected = "The type 'System.String' must derive from " +
|
||||||
|
"'Microsoft.AspNet.Mvc.ModelBinding.IModelBinder'.";
|
||||||
|
var type = typeof(string);
|
||||||
|
|
||||||
|
// Act & Assert
|
||||||
|
ExceptionAssert.ThrowsArgument(() => new ModelBinderDescriptor(type), "type", expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConstructorSetsOptionType()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var type = typeof(TestModelBinder);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var descriptor = new ModelBinderDescriptor(type);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal(type, descriptor.OptionType);
|
||||||
|
Assert.Null(descriptor.Instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConstructorSetsInstanceeAndOptionType()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var viewEngine = new TestModelBinder();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var descriptor = new ModelBinderDescriptor(viewEngine);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Same(viewEngine, descriptor.Instance);
|
||||||
|
Assert.Equal(viewEngine.GetType(), descriptor.OptionType);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class TestModelBinder : IModelBinder
|
||||||
|
{
|
||||||
|
public Task<bool> BindModelAsync(ModelBindingContext bindingContext)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
// 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.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
#if NET45
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Microsoft.AspNet.Mvc.OptionDescriptors;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
@ -24,7 +24,7 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
||||||
};
|
};
|
||||||
|
|
||||||
// Act & Assert
|
// Act & Assert
|
||||||
Assert.Throws<ArgumentOutOfRangeException>("index",
|
Assert.Throws<ArgumentOutOfRangeException>("index",
|
||||||
() => collection.Insert(index, typeof(OutputFormatter)));
|
() => collection.Insert(index, typeof(OutputFormatter)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -63,11 +63,10 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(4, collection.Count);
|
Assert.Equal(4, collection.Count);
|
||||||
Assert.Equal(formatter1, collection[0].OutputFormatter);
|
Assert.Equal(formatter1, collection[0].Instance);
|
||||||
Assert.Equal(formatter2, collection[1].OutputFormatter);
|
Assert.Equal(formatter2, collection[1].Instance);
|
||||||
Assert.Equal(type2, collection[2].OutputFormatterType);
|
Assert.Equal(type2, collection[2].OptionType);
|
||||||
Assert.Equal(type1, collection[3].OutputFormatterType);
|
Assert.Equal(type1, collection[3].OptionType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
@ -1,10 +1,11 @@
|
||||||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
// 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.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using Microsoft.AspNet.Mvc.OptionDescriptors;
|
||||||
using Microsoft.AspNet.Testing;
|
using Microsoft.AspNet.Testing;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc.Core.Test
|
namespace Microsoft.AspNet.Mvc.Core
|
||||||
{
|
{
|
||||||
public class OutputFormatterDescriptorTest
|
public class OutputFormatterDescriptorTest
|
||||||
{
|
{
|
||||||
|
|
@ -18,7 +19,7 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
||||||
var type = typeof(string);
|
var type = typeof(string);
|
||||||
|
|
||||||
// Act & Assert
|
// Act & Assert
|
||||||
ExceptionAssert.ThrowsArgument(() => new OutputFormatterDescriptor(type), "outputFormatterType", expected);
|
ExceptionAssert.ThrowsArgument(() => new OutputFormatterDescriptor(type), "type", expected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,75 @@
|
||||||
|
// 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.ModelBinding;
|
||||||
|
using Microsoft.AspNet.Mvc.OptionDescriptors;
|
||||||
|
using Moq;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc
|
||||||
|
{
|
||||||
|
public class ValueProviderFactoryDescriptorExtensionsTest
|
||||||
|
{
|
||||||
|
[Theory]
|
||||||
|
[InlineData(-1)]
|
||||||
|
[InlineData(5)]
|
||||||
|
public void Insert_WithType_ThrowsIfIndexIsOutOfBounds(int index)
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var collection = new List<ValueProviderFactoryDescriptor>
|
||||||
|
{
|
||||||
|
new ValueProviderFactoryDescriptor(Mock.Of<IValueProviderFactory>()),
|
||||||
|
new ValueProviderFactoryDescriptor(Mock.Of<IValueProviderFactory>())
|
||||||
|
};
|
||||||
|
|
||||||
|
// Act & Assert
|
||||||
|
Assert.Throws<ArgumentOutOfRangeException>("index",
|
||||||
|
() => collection.Insert(index, typeof(IValueProviderFactory)));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData(-2)]
|
||||||
|
[InlineData(3)]
|
||||||
|
public void Insert_WithInstance_ThrowsIfIndexIsOutOfBounds(int index)
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var collection = new List<ValueProviderFactoryDescriptor>
|
||||||
|
{
|
||||||
|
new ValueProviderFactoryDescriptor(Mock.Of<IValueProviderFactory>()),
|
||||||
|
new ValueProviderFactoryDescriptor(Mock.Of<IValueProviderFactory>())
|
||||||
|
};
|
||||||
|
var valueProviderFactory = Mock.Of<IValueProviderFactory>();
|
||||||
|
|
||||||
|
// Act & Assert
|
||||||
|
Assert.Throws<ArgumentOutOfRangeException>("index", () => collection.Insert(index, valueProviderFactory));
|
||||||
|
}
|
||||||
|
|
||||||
|
[InlineData]
|
||||||
|
public void ValueProviderFactoryDescriptors_AddsTypesAndInstances()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var valueProviderFactory = Mock.Of<IValueProviderFactory>();
|
||||||
|
var type = typeof(TestValueProviderFactory);
|
||||||
|
var collection = new List<ValueProviderFactoryDescriptor>();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
collection.Add(valueProviderFactory);
|
||||||
|
collection.Insert(0, type);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal(2, collection.Count);
|
||||||
|
Assert.IsType<TestValueProviderFactory>(collection[0].Instance);
|
||||||
|
Assert.Same(valueProviderFactory, collection[0].Instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class TestValueProviderFactory : IValueProviderFactory
|
||||||
|
{
|
||||||
|
public IValueProvider GetValueProvider(ValueProviderFactoryContext context)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
// 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 Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
|
using Microsoft.AspNet.Testing;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.OptionDescriptors
|
||||||
|
{
|
||||||
|
public class ValueProviderFactoryDescriptorTest
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void ConstructorThrows_IfTypeIsNotViewEngine()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var viewEngineType = typeof(IValueProviderFactory).FullName;
|
||||||
|
var type = typeof(string);
|
||||||
|
var expected = string.Format("The type '{0}' must derive from '{1}'.",
|
||||||
|
type.FullName, viewEngineType);
|
||||||
|
|
||||||
|
// Act & Assert
|
||||||
|
ExceptionAssert.ThrowsArgument(() => new ValueProviderFactoryDescriptor(type), "type", expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConstructorSetsViewEngineType()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var type = typeof(TestValueProviderFactory);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var descriptor = new ValueProviderFactoryDescriptor(type);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal(type, descriptor.OptionType);
|
||||||
|
Assert.Null(descriptor.Instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ConstructorSetsViewEngineAndViewEngineType()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var viewEngine = new TestValueProviderFactory();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var descriptor = new ValueProviderFactoryDescriptor(viewEngine);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Same(viewEngine, descriptor.Instance);
|
||||||
|
Assert.Equal(viewEngine.GetType(), descriptor.OptionType);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class TestValueProviderFactory : IValueProviderFactory
|
||||||
|
{
|
||||||
|
public IValueProvider GetValueProvider(ValueProviderFactoryContext context)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,11 +2,11 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using Microsoft.AspNet.Mvc.Rendering;
|
||||||
using Microsoft.AspNet.Testing;
|
using Microsoft.AspNet.Testing;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc.Rendering
|
namespace Microsoft.AspNet.Mvc.OptionDescriptors
|
||||||
{
|
{
|
||||||
public class ViewEngineDescriptorTest
|
public class ViewEngineDescriptorTest
|
||||||
{
|
{
|
||||||
|
|
@ -33,8 +33,8 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
||||||
var descriptor = new ViewEngineDescriptor(type);
|
var descriptor = new ViewEngineDescriptor(type);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(type, descriptor.ViewEngineType);
|
Assert.Equal(type, descriptor.OptionType);
|
||||||
Assert.Null(descriptor.ViewEngine);
|
Assert.Null(descriptor.Instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -47,8 +47,8 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
||||||
var descriptor = new ViewEngineDescriptor(viewEngine);
|
var descriptor = new ViewEngineDescriptor(viewEngine);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Same(viewEngine, descriptor.ViewEngine);
|
Assert.Same(viewEngine, descriptor.Instance);
|
||||||
Assert.Equal(viewEngine.GetType(), descriptor.ViewEngineType);
|
Assert.Equal(viewEngine.GetType(), descriptor.OptionType);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TestViewEngine : IViewEngine
|
private class TestViewEngine : IViewEngine
|
||||||
|
|
@ -1,13 +1,14 @@
|
||||||
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
// 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.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
#if NET45
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Microsoft.AspNet.Mvc.OptionDescriptors;
|
||||||
|
using Microsoft.AspNet.Mvc.Rendering;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc.Rendering
|
namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
public class ViewEngineDescriptorExtensionTest
|
public class ViewEngineDescriptorExtensionTest
|
||||||
{
|
{
|
||||||
|
|
@ -58,8 +59,8 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(2, collection.Count);
|
Assert.Equal(2, collection.Count);
|
||||||
Assert.IsType<TestViewEngine>(collection[0].ViewEngine);
|
Assert.IsType<TestViewEngine>(collection[0].Instance);
|
||||||
Assert.Same(viewEngine, collection[0].ViewEngine);
|
Assert.Same(viewEngine, collection[0].Instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TestViewEngine : IViewEngine
|
private class TestViewEngine : IViewEngine
|
||||||
|
|
@ -76,4 +77,3 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
@ -299,7 +299,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test
|
||||||
new TypeConverterModelBinder(),
|
new TypeConverterModelBinder(),
|
||||||
new MutableObjectModelBinder()
|
new MutableObjectModelBinder()
|
||||||
};
|
};
|
||||||
var binderProviders = new Mock<IModelBindersProvider>();
|
var binderProviders = new Mock<IModelBinderProvider>();
|
||||||
binderProviders.SetupGet(p => p.ModelBinders)
|
binderProviders.SetupGet(p => p.ModelBinders)
|
||||||
.Returns(binders);
|
.Returns(binders);
|
||||||
var binder = new CompositeModelBinder(binderProviders.Object);
|
var binder = new CompositeModelBinder(binderProviders.Object);
|
||||||
|
|
@ -308,7 +308,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test
|
||||||
|
|
||||||
private static CompositeModelBinder CreateCompositeBinder(IModelBinder mockIntBinder)
|
private static CompositeModelBinder CreateCompositeBinder(IModelBinder mockIntBinder)
|
||||||
{
|
{
|
||||||
var binderProvider = new Mock<IModelBindersProvider>();
|
var binderProvider = new Mock<IModelBinderProvider>();
|
||||||
binderProvider.SetupGet(p => p.ModelBinders)
|
binderProvider.SetupGet(p => p.ModelBinders)
|
||||||
.Returns(new[] { mockIntBinder });
|
.Returns(new[] { mockIntBinder });
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Test
|
||||||
public async Task BindModel_SubBindingSucceeds()
|
public async Task BindModel_SubBindingSucceeds()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var binderProviders = new Mock<IModelBindersProvider>();
|
var binderProviders = new Mock<IModelBinderProvider>();
|
||||||
binderProviders.SetupGet(b => b.ModelBinders)
|
binderProviders.SetupGet(b => b.ModelBinders)
|
||||||
.Returns(new[] { CreateStringBinder(), CreateIntBinder() });
|
.Returns(new[] { CreateStringBinder(), CreateIntBinder() });
|
||||||
var innerBinder = new CompositeModelBinder(binderProviders.Object);
|
var innerBinder = new CompositeModelBinder(binderProviders.Object);
|
||||||
|
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
// 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 Microsoft.AspNet.Testing;
|
|
||||||
using Xunit;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc.ModelBinding
|
|
||||||
{
|
|
||||||
public class ModelBinderDescriptorTest
|
|
||||||
{
|
|
||||||
[Fact]
|
|
||||||
public void ConstructorThrows_IfTypeIsNotIModelBinder()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
var expected = "The type 'System.String' must derive from " +
|
|
||||||
"'Microsoft.AspNet.Mvc.ModelBinding.IModelBinder'.";
|
|
||||||
var type = typeof(string);
|
|
||||||
|
|
||||||
// Act & Assert
|
|
||||||
ExceptionAssert.ThrowsArgument(() => new ModelBinderDescriptor(type), "modelBinderType", expected);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -29,8 +29,6 @@
|
||||||
<Compile Include="Binders\CompositeModelBinderTest.cs" />
|
<Compile Include="Binders\CompositeModelBinderTest.cs" />
|
||||||
<Compile Include="Binders\DictionaryModelBinderTest.cs" />
|
<Compile Include="Binders\DictionaryModelBinderTest.cs" />
|
||||||
<Compile Include="Binders\KeyValuePairModelBinderTest.cs" />
|
<Compile Include="Binders\KeyValuePairModelBinderTest.cs" />
|
||||||
<Compile Include="Binders\ModelBinderDescriptorExtensionsTest.cs" />
|
|
||||||
<Compile Include="Binders\ModelBinderDescriptorTest.cs" />
|
|
||||||
<Compile Include="Binders\ModelBindingContextTest.cs" />
|
<Compile Include="Binders\ModelBindingContextTest.cs" />
|
||||||
<Compile Include="Binders\MutableObjectModelBinderTest.cs" />
|
<Compile Include="Binders\MutableObjectModelBinderTest.cs" />
|
||||||
<Compile Include="Binders\TypeConverterModelBinderTest.cs" />
|
<Compile Include="Binders\TypeConverterModelBinderTest.cs" />
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(1, mvcOptions.ViewEngines.Count);
|
Assert.Equal(1, mvcOptions.ViewEngines.Count);
|
||||||
Assert.Equal(typeof(RazorViewEngine), mvcOptions.ViewEngines[0].ViewEngineType);
|
Assert.Equal(typeof(RazorViewEngine), mvcOptions.ViewEngines[0].OptionType);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -36,11 +36,11 @@ namespace Microsoft.AspNet.Mvc
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(5, mvcOptions.ModelBinders.Count);
|
Assert.Equal(5, mvcOptions.ModelBinders.Count);
|
||||||
Assert.Equal(typeof(TypeConverterModelBinder), mvcOptions.ModelBinders[0].ModelBinderType);
|
Assert.Equal(typeof(TypeConverterModelBinder), mvcOptions.ModelBinders[0].OptionType);
|
||||||
Assert.Equal(typeof(TypeMatchModelBinder), mvcOptions.ModelBinders[1].ModelBinderType);
|
Assert.Equal(typeof(TypeMatchModelBinder), mvcOptions.ModelBinders[1].OptionType);
|
||||||
Assert.Equal(typeof(GenericModelBinder), mvcOptions.ModelBinders[2].ModelBinderType);
|
Assert.Equal(typeof(GenericModelBinder), mvcOptions.ModelBinders[2].OptionType);
|
||||||
Assert.Equal(typeof(MutableObjectModelBinder), mvcOptions.ModelBinders[3].ModelBinderType);
|
Assert.Equal(typeof(MutableObjectModelBinder), mvcOptions.ModelBinders[3].OptionType);
|
||||||
Assert.Equal(typeof(ComplexModelDtoModelBinder), mvcOptions.ModelBinders[4].ModelBinderType);
|
Assert.Equal(typeof(ComplexModelDtoModelBinder), mvcOptions.ModelBinders[4].OptionType);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -56,11 +56,11 @@ namespace Microsoft.AspNet.Mvc
|
||||||
// Assert
|
// Assert
|
||||||
var valueProviders = mvcOptions.ValueProviderFactories;
|
var valueProviders = mvcOptions.ValueProviderFactories;
|
||||||
Assert.Equal(3, valueProviders.Count);
|
Assert.Equal(3, valueProviders.Count);
|
||||||
Assert.IsType<RouteValueValueProviderFactory>(valueProviders[0]);
|
Assert.IsType<RouteValueValueProviderFactory>(valueProviders[0].Instance);
|
||||||
Assert.IsType<QueryStringValueProviderFactory>(valueProviders[1]);
|
Assert.IsType<QueryStringValueProviderFactory>(valueProviders[1].Instance);
|
||||||
Assert.IsType<FormValueProviderFactory>(valueProviders[2]);
|
Assert.IsType<FormValueProviderFactory>(valueProviders[2].Instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void Setup_SetsUpOutputFormatters()
|
public void Setup_SetsUpOutputFormatters()
|
||||||
{
|
{
|
||||||
|
|
@ -73,7 +73,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(1, mvcOptions.OutputFormatters.Count);
|
Assert.Equal(1, mvcOptions.OutputFormatters.Count);
|
||||||
Assert.IsType<JsonOutputFormatter>(mvcOptions.OutputFormatters[0].OutputFormatter);
|
Assert.IsType<JsonOutputFormatter>(mvcOptions.OutputFormatters[0].Instance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue