React to options changes

This commit is contained in:
Hao Kung 2015-09-02 14:07:06 -07:00
parent dd94d54e1d
commit 3ebdcc5f6f
73 changed files with 152 additions and 166 deletions

View File

@ -41,7 +41,7 @@ namespace Microsoft.AspNet.Mvc.ApiExplorer
IInlineConstraintResolver constraintResolver,
IModelMetadataProvider modelMetadataProvider)
{
_outputFormatters = optionsAccessor.Options.OutputFormatters;
_outputFormatters = optionsAccessor.Value.OutputFormatters;
_constraintResolver = constraintResolver;
_modelMetadataProvider = modelMetadataProvider;
}

View File

@ -252,7 +252,7 @@ namespace Microsoft.AspNet.Mvc.ActionResults
.HttpContext
.RequestServices
.GetRequiredService<IOptions<MvcOptions>>()
.Options;
.Value;
var respectAcceptHeader = true;
if (options.RespectBrowserAcceptHeader == false
@ -311,7 +311,7 @@ namespace Microsoft.AspNet.Mvc.ActionResults
.HttpContext
.RequestServices
.GetRequiredService<IOptions<MvcOptions>>()
.Options;
.Value;
formatters = options.OutputFormatters;
}
else

View File

@ -22,7 +22,7 @@ namespace Microsoft.AspNet.Mvc.Actions
{
_controllerTypeProvider = controllerTypeProvider;
_applicationModelProviders = applicationModelProviders.OrderBy(p => p.Order).ToArray();
_conventions = optionsAccessor.Options.Conventions;
_conventions = optionsAccessor.Value.Conventions;
}
public int Order

View File

@ -41,13 +41,13 @@ namespace Microsoft.AspNet.Mvc.Actions
_controllerFactory = controllerFactory;
_filterProviders = filterProviders.OrderBy(item => item.Order).ToArray();
_argumentBinder = argumentBinder;
_inputFormatters = optionsAccessor.Options.InputFormatters.ToArray();
_outputFormatters = optionsAccessor.Options.OutputFormatters.ToArray();
_modelBinders = optionsAccessor.Options.ModelBinders.ToArray();
_modelValidatorProviders = optionsAccessor.Options.ModelValidatorProviders.ToArray();
_valueProviderFactories = optionsAccessor.Options.ValueProviderFactories.ToArray();
_inputFormatters = optionsAccessor.Value.InputFormatters.ToArray();
_outputFormatters = optionsAccessor.Value.OutputFormatters.ToArray();
_modelBinders = optionsAccessor.Value.ModelBinders.ToArray();
_modelValidatorProviders = optionsAccessor.Value.ModelValidatorProviders.ToArray();
_valueProviderFactories = optionsAccessor.Value.ValueProviderFactories.ToArray();
_actionBindingContextAccessor = actionBindingContextAccessor;
_maxModelValidationErrors = optionsAccessor.Options.MaxModelValidationErrors;
_maxModelValidationErrors = optionsAccessor.Value.MaxModelValidationErrors;
_logger = loggerFactory.CreateLogger<ControllerActionInvoker>();
_notifier = notifier;
}

View File

@ -15,7 +15,7 @@ namespace Microsoft.AspNet.Mvc.ApplicationModels
public AuthorizationApplicationModelProvider(IOptions<AuthorizationOptions> authorizationOptionsAccessor)
{
_authorizationOptions = authorizationOptionsAccessor.Options;
_authorizationOptions = authorizationOptionsAccessor.Value;
}
public int Order { get { return DefaultOrder.DefaultFrameworkSortOrder + 10; } }

View File

@ -22,7 +22,7 @@ namespace Microsoft.AspNet.Mvc.ApplicationModels
public DefaultApplicationModelProvider(IOptions<MvcOptions> mvcOptionsAccessor)
{
_globalFilters = mvcOptionsAccessor.Options.Filters;
_globalFilters = mvcOptionsAccessor.Value.Filters;
}
/// <inheritdoc />

View File

@ -108,12 +108,12 @@ namespace Microsoft.Framework.DependencyInjection
services.TryAddSingleton<IModelMetadataProvider, DefaultModelMetadataProvider>();
services.TryAdd(ServiceDescriptor.Transient<ICompositeMetadataDetailsProvider>(serviceProvider =>
{
var options = serviceProvider.GetRequiredService<IOptions<MvcOptions>>().Options;
var options = serviceProvider.GetRequiredService<IOptions<MvcOptions>>().Value;
return new DefaultCompositeMetadataDetailsProvider(options.ModelMetadataDetailsProviders);
}));
services.TryAdd(ServiceDescriptor.Singleton<IObjectModelValidator>(serviceProvider =>
{
var options = serviceProvider.GetRequiredService<IOptions<MvcOptions>>().Options;
var options = serviceProvider.GetRequiredService<IOptions<MvcOptions>>().Value;
var modelMetadataProvider = serviceProvider.GetRequiredService<IModelMetadataProvider>();
return new DefaultObjectValidator(options.ValidationExcludeFilters, modelMetadataProvider);
}));

View File

@ -35,7 +35,7 @@ namespace Microsoft.AspNet.Mvc.Formatters
return;
}
ContentType = options.Options.FormatterMappings.GetMediaTypeMappingForFormat(Format);
ContentType = options.Value.FormatterMappings.GetMediaTypeMappingForFormat(Format);
}
/// <summary>

View File

@ -19,7 +19,6 @@ namespace Microsoft.AspNet.Mvc
public MvcCoreMvcOptionsSetup()
: base(ConfigureMvc)
{
Order = DefaultOrder.DefaultFrameworkSortOrder;
}
public static void ConfigureMvc(MvcOptions options)

View File

@ -15,7 +15,6 @@ namespace Microsoft.AspNet.Mvc
public MvcCoreRouteOptionsSetup()
: base(ConfigureRouting)
{
Order = DefaultOrder.DefaultFrameworkSortOrder;
}
/// <summary>

View File

@ -94,7 +94,7 @@ namespace Microsoft.AspNet.Mvc
CacheProfile selectedProfile = null;
if (CacheProfileName != null)
{
optionsAccessor.Options.CacheProfiles.TryGetValue(CacheProfileName, out selectedProfile);
optionsAccessor.Value.CacheProfiles.TryGetValue(CacheProfileName, out selectedProfile);
if (selectedProfile == null)
{
throw new InvalidOperationException(Resources.FormatCacheProfileNotFound(CacheProfileName));

View File

@ -15,7 +15,6 @@ namespace Microsoft.AspNet.Mvc
public MvcDataAnnotationsMvcOptionsSetup()
: base(ConfigureMvc)
{
Order = DefaultOrder.DefaultFrameworkSortOrder + 1;
}
public static void ConfigureMvc(MvcOptions options)

View File

@ -94,7 +94,7 @@ namespace Microsoft.AspNet.Mvc.ActionResults
.HttpContext
.RequestServices
.GetRequiredService<IOptions<MvcJsonOptions>>()
.Options
.Value
.SerializerSettings;
}

View File

@ -12,9 +12,8 @@ namespace Microsoft.AspNet.Mvc
public class MvcJsonMvcOptionsSetup : ConfigureOptions<MvcOptions>
{
public MvcJsonMvcOptionsSetup(IOptions<MvcJsonOptions> jsonOptions)
: base((_) => ConfigureMvc(_, jsonOptions.Options.SerializerSettings))
: base((_) => ConfigureMvc(_, jsonOptions.Value.SerializerSettings))
{
Order = DefaultOrder.DefaultFrameworkSortOrder + 10;
}
public static void ConfigureMvc(MvcOptions options, JsonSerializerSettings serializerSettings)

View File

@ -19,7 +19,6 @@ namespace Microsoft.AspNet.Mvc
public MvcXmlDataContractSerializerMvcOptionsSetup()
: base(ConfigureMvc)
{
Order = DefaultOrder.DefaultFrameworkSortOrder + 10;
}
/// <summary>

View File

@ -18,7 +18,6 @@ namespace Microsoft.AspNet.Mvc
public MvcXmlSerializerMvcOptionsSetup()
: base(ConfigureMvc)
{
Order = DefaultOrder.DefaultFrameworkSortOrder + 10;
}
/// <summary>

View File

@ -19,8 +19,7 @@ namespace Microsoft.AspNet.Mvc.Localization.Internal
options =>
{
options.ViewLocationExpanders.Add(new LanguageViewLocationExpander(format));
},
DefaultOrder.DefaultFrameworkSortOrder);
});
services.TryAdd(ServiceDescriptor.Singleton<IHtmlLocalizerFactory, HtmlLocalizerFactory>());
services.TryAdd(ServiceDescriptor.Transient(typeof(IHtmlLocalizer<>), typeof(HtmlLocalizer<>)));

View File

@ -22,7 +22,6 @@ namespace Microsoft.AspNet.Mvc.Razor.Compilation
/// </summary>
/// <param name="fileProvider"><see cref="IFileProvider"/> used to locate Razor views.</param>
public CompilerCache([NotNull] IFileProvider fileProvider)
{
_fileProvider = fileProvider;
_cache = new MemoryCache(new MemoryCacheOptions { CompactOnMemoryPressure = false });
}

View File

@ -39,7 +39,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Compilation
{
_compilationService = compilationService;
_razorHost = razorHost;
_fileProvider = viewEngineOptions.Options.FileProvider;
_fileProvider = viewEngineOptions.Value.FileProvider;
}
/// <inheritdoc />

View File

@ -63,7 +63,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Compilation
_libraryExporter = libraryExporter;
_applicationReferences = new Lazy<List<MetadataReference>>(GetApplicationReferences);
_compilerOptionsProvider = compilerOptionsProvider;
_fileProvider = optionsAccessor.Options.FileProvider;
_fileProvider = optionsAccessor.Value.FileProvider;
_classPrefix = host.MainClassNamePrefix;
}

View File

@ -54,18 +54,5 @@ namespace Microsoft.Framework.DependencyInjection
return builder;
}
public static IMvcBuilder AddPrecompiledRazorViews(
[NotNull] this IMvcBuilder builder,
[NotNull] params Assembly[] assemblies)
{
builder.Services.Replace(
ServiceDescriptor.Singleton<ICompilerCacheProvider>(serviceProvider =>
ActivatorUtilities.CreateInstance<PrecompiledViewsCompilerCacheProvider>(
serviceProvider,
assemblies.AsEnumerable())));
return builder;
}
}
}
}

View File

@ -20,7 +20,6 @@ namespace Microsoft.AspNet.Mvc.Razor
public MvcRazorMvcViewOptionsSetup(IServiceProvider serviceProvider)
: base(options => ConfigureMvc(serviceProvider, options))
{
Order = DefaultOrder.DefaultFrameworkSortOrder;
}
/// <summary>

View File

@ -55,7 +55,7 @@ namespace Microsoft.AspNet.Mvc.Razor
{
_pageFactory = pageFactory;
_viewFactory = viewFactory;
_viewLocationExpanders = optionsAccessor.Options.ViewLocationExpanders;
_viewLocationExpanders = optionsAccessor.Value.ViewLocationExpanders;
_viewLocationCache = viewLocationCache;
}

View File

@ -20,7 +20,6 @@ namespace Microsoft.AspNet.Mvc
public RazorViewEngineOptionsSetup(IApplicationEnvironment applicationEnvironment)
: base(options => ConfigureRazor(options, applicationEnvironment))
{
Order = DefaultOrder.DefaultFrameworkSortOrder;
}
private static void ConfigureRazor(RazorViewEngineOptions razorOptions,

View File

@ -89,7 +89,7 @@ namespace Microsoft.AspNet.Mvc.ActionResults
context,
ViewData,
TempData,
options.Options.HtmlHelperOptions,
options.Value.HtmlHelperOptions,
ContentType);
}
}

View File

@ -69,7 +69,7 @@ namespace Microsoft.AspNet.Mvc.ActionResults
var response = context.HttpContext.Response;
var services = context.HttpContext.RequestServices;
var htmlHelperOptions = services.GetRequiredService<IOptions<MvcViewOptions>>().Options.HtmlHelperOptions;
var htmlHelperOptions = services.GetRequiredService<IOptions<MvcViewOptions>>().Value.HtmlHelperOptions;
var viewComponentHelper = services.GetRequiredService<IViewComponentHelper>();
var viewData = ViewData;

View File

@ -110,7 +110,7 @@ namespace Microsoft.AspNet.Mvc.ActionResults
context,
ViewData,
TempData,
options.Options.HtmlHelperOptions,
options.Value.HtmlHelperOptions,
ContentType);
}
}

View File

@ -17,7 +17,6 @@ namespace Microsoft.AspNet.Mvc
public MvcViewOptionsSetup()
: base(ConfigureMvc)
{
Order = DefaultOrder.DefaultFrameworkSortOrder;
}
public static void ConfigureMvc(MvcViewOptions options)

View File

@ -49,14 +49,14 @@ namespace Microsoft.AspNet.Mvc.Rendering
[NotNull] IHtmlEncoder htmlEncoder)
{
_antiforgery = antiforgery;
var clientValidatorProviders = optionsAccessor.Options.ClientModelValidatorProviders;
var clientValidatorProviders = optionsAccessor.Value.ClientModelValidatorProviders;
_clientModelValidatorProvider = new CompositeClientModelValidatorProvider(clientValidatorProviders);
_metadataProvider = metadataProvider;
_urlHelper = urlHelper;
_htmlEncoder = htmlEncoder;
// Underscores are fine characters in id's.
IdAttributeDotReplacement = optionsAccessor.Options.HtmlHelperOptions.IdAttributeDotReplacement;
IdAttributeDotReplacement = optionsAccessor.Value.HtmlHelperOptions.IdAttributeDotReplacement;
}
/// <inheritdoc />

View File

@ -18,7 +18,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
/// <param name="optionsAccessor">The options accessor for <see cref="MvcViewOptions"/>.</param>
public CompositeViewEngine(IOptions<MvcViewOptions> optionsAccessor)
{
ViewEngines = optionsAccessor.Options.ViewEngines.ToArray();
ViewEngines = optionsAccessor.Value.ViewEngines.ToArray();
}
/// <inheritdoc />

View File

@ -56,7 +56,7 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
.HttpContext
.RequestServices
.GetRequiredService<IOptions<MvcJsonOptions>>()
.Options
.Value
.SerializerSettings;
}

View File

@ -6,7 +6,6 @@ using System.Net.Http.Formatting;
using System.Net.Http.Headers;
using System.Web.Http;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Mvc.ModelBinding;
using Microsoft.AspNet.Mvc.WebApiCompatShim;
using Microsoft.Framework.DependencyInjection;
@ -244,7 +243,7 @@ namespace System.Net.Http
{
// Get the default formatters from options
var options = context.RequestServices.GetRequiredService<IOptions<WebApiCompatShimOptions>>();
formatters = options.Options.Formatters;
formatters = options.Value.Formatters;
}
var contentNegotiator = context.RequestServices.GetRequiredService<IContentNegotiator>();
@ -306,7 +305,7 @@ namespace System.Net.Http
// Get the default formatters from options
var options = context.RequestServices.GetRequiredService<IOptions<WebApiCompatShimOptions>>();
var formatters = options.Options.Formatters;
var formatters = options.Value.Formatters;
var formatter = formatters.FindWriter(typeof(T), mediaType);
if (formatter == null)

View File

@ -13,15 +13,9 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim
{
public static readonly string DefaultAreaName = "api";
public int Order
{
// We want to run after the default MvcOptionsSetup.
get { return DefaultOrder.DefaultFrameworkSortOrder + 100; }
}
public string Name { get; set; }
public void Configure(MvcOptions options, string name = "")
public void Configure(MvcOptions options)
{
// Add webapi behaviors to controllers with the appropriate attributes
options.Conventions.Add(new WebApiActionConventionsApplicationModelConvention());
@ -42,7 +36,7 @@ namespace Microsoft.AspNet.Mvc.WebApiCompatShim
options.ValidationExcludeFilters.Add(typeof(HttpResponseMessage));
}
public void Configure(WebApiCompatShimOptions options, string name = "")
public void Configure(WebApiCompatShimOptions options)
{
// Add the default formatters
options.Formatters.AddRange(new MediaTypeFormatterCollection());

View File

@ -21,18 +21,26 @@ namespace Microsoft.Framework.DependencyInjection
builder.AddApiExplorer();
builder.AddAuthorization();
builder.AddCors();
builder.AddDataAnnotations();
// Order added affects options setup order
// Default framework order
builder.AddFormatterMappings();
builder.AddJsonFormatters();
builder.AddViews();
builder.AddRazorViewEngine();
// +1 order
builder.AddDataAnnotations(); // +1 order
// +10 order
builder.AddJsonFormatters();
builder.AddCors();
if (setupAction != null)
{
builder.Services.Configure(setupAction);
}
return new MvcBuilder(services);
}
}

View File

@ -1004,7 +1004,7 @@ namespace Microsoft.AspNet.Mvc.Description
}
var optionsAccessor = new Mock<IOptions<MvcOptions>>();
optionsAccessor.SetupGet(o => o.Options)
optionsAccessor.SetupGet(o => o.Value)
.Returns(options);
var constraintResolver = new Mock<IInlineConstraintResolver>();

View File

@ -97,8 +97,9 @@ namespace Microsoft.AspNet.Mvc.ActionResults
httpContext.RequestServices = services.Object;
var optionsAccessor = new TestOptionsManager<MvcOptions>();
optionsAccessor.Options.OutputFormatters.Add(new StringOutputFormatter());
optionsAccessor.Options.OutputFormatters.Add(new JsonOutputFormatter());
var optionsAccessor = new MockMvcOptionsAccessor();
optionsAccessor.Value.OutputFormatters.Add(new StringOutputFormatter());
optionsAccessor.Value.OutputFormatters.Add(new JsonOutputFormatter());
services.Setup(p => p.GetService(typeof(IOptions<MvcOptions>)))
.Returns(optionsAccessor);
services.Setup(s => s.GetService(typeof(ILogger<ObjectResult>)))
@ -106,7 +107,7 @@ namespace Microsoft.AspNet.Mvc.ActionResults
var actionBindingContext = new ActionBindingContext
{
OutputFormatters = optionsAccessor.Options.OutputFormatters
OutputFormatters = optionsAccessor.Value.OutputFormatters
};
services.Setup(o => o.GetService(typeof(IActionBindingContextAccessor)))
.Returns(new ActionBindingContextAccessor() { ActionBindingContext = actionBindingContext });

View File

@ -102,8 +102,8 @@ namespace Microsoft.AspNet.Mvc.ActionResults
httpContext.Setup(o => o.Request)
.Returns(request);
var optionsAccessor = new TestOptionsManager<MvcOptions>();
optionsAccessor.Options.OutputFormatters.Add(new StringOutputFormatter());
optionsAccessor.Options.OutputFormatters.Add(new JsonOutputFormatter());
optionsAccessor.Value.OutputFormatters.Add(new StringOutputFormatter());
optionsAccessor.Value.OutputFormatters.Add(new JsonOutputFormatter());
httpContext.Setup(o => o.RequestServices.GetService(typeof(IOptions<MvcOptions>)))
.Returns(optionsAccessor);
httpContext.Setup(o => o.RequestServices.GetService(typeof(ILogger<ObjectResult>)))

View File

@ -90,8 +90,8 @@ namespace Microsoft.AspNet.Mvc.ActionResults
httpContext.Setup(o => o.Response)
.Returns(response);
var optionsAccessor = new TestOptionsManager<MvcOptions>();
optionsAccessor.Options.OutputFormatters.Add(new StringOutputFormatter());
optionsAccessor.Options.OutputFormatters.Add(new JsonOutputFormatter());
optionsAccessor.Value.OutputFormatters.Add(new StringOutputFormatter());
optionsAccessor.Value.OutputFormatters.Add(new JsonOutputFormatter());
httpContext
.Setup(p => p.RequestServices.GetService(typeof(IOptions<MvcOptions>)))
.Returns(optionsAccessor);
@ -101,7 +101,7 @@ namespace Microsoft.AspNet.Mvc.ActionResults
var actionBindingContext = new ActionBindingContext()
{
OutputFormatters = optionsAccessor.Options.OutputFormatters
OutputFormatters = optionsAccessor.Value.OutputFormatters
};
httpContext
.Setup(o => o.RequestServices.GetService(typeof(IActionBindingContextAccessor)))

View File

@ -89,14 +89,14 @@ namespace Microsoft.AspNet.Mvc.ActionResults
httpContext.Setup(o => o.Request).Returns(request);
httpContext.Setup(o => o.RequestServices).Returns(GetServiceProvider());
var optionsAccessor = new TestOptionsManager<MvcOptions>();
optionsAccessor.Options.OutputFormatters.Add(new StringOutputFormatter());
optionsAccessor.Options.OutputFormatters.Add(new JsonOutputFormatter());
optionsAccessor.Options.RespectBrowserAcceptHeader = respectBrowserAcceptHeader;
optionsAccessor.Value.OutputFormatters.Add(new StringOutputFormatter());
optionsAccessor.Value.OutputFormatters.Add(new JsonOutputFormatter());
optionsAccessor.Value.RespectBrowserAcceptHeader = respectBrowserAcceptHeader;
var actionBindingContextAccessor = new ActionBindingContextAccessor()
{
ActionBindingContext = new ActionBindingContext()
{
OutputFormatters = optionsAccessor.Options.OutputFormatters
OutputFormatters = optionsAccessor.Value.OutputFormatters
}
};
@ -114,7 +114,7 @@ namespace Microsoft.AspNet.Mvc.ActionResults
{
var options = new MvcOptions();
var optionsAccessor = new Mock<IOptions<MvcOptions>>();
optionsAccessor.SetupGet(o => o.Options).Returns(options);
optionsAccessor.SetupGet(o => o.Value).Returns(options);
var serviceCollection = new ServiceCollection();
serviceCollection.AddInstance(optionsAccessor.Object);

View File

@ -76,12 +76,12 @@ namespace Microsoft.AspNet.Mvc.ActionResults
new Logger<ObjectResult>(NullLoggerFactory.Instance)));
var optionsAccessor = new TestOptionsManager<MvcOptions>();
optionsAccessor.Options.OutputFormatters.Add(new JsonOutputFormatter());
optionsAccessor.Value.OutputFormatters.Add(new JsonOutputFormatter());
services.Add(new ServiceDescriptor(typeof(IOptions<MvcOptions>), optionsAccessor));
var bindingContext = new ActionBindingContext
{
OutputFormatters = optionsAccessor.Options.OutputFormatters,
OutputFormatters = optionsAccessor.Value.OutputFormatters,
};
var bindingContextAccessor = new ActionBindingContextAccessor
{

View File

@ -899,10 +899,10 @@ namespace Microsoft.AspNet.Mvc.ActionResults
var optionsAccessor = new TestOptionsManager<MvcOptions>();
foreach (var formatter in outputFormatters)
{
optionsAccessor.Options.OutputFormatters.Add(formatter);
optionsAccessor.Value.OutputFormatters.Add(formatter);
}
optionsAccessor.Options.RespectBrowserAcceptHeader = respectBrowserAcceptHeader;
optionsAccessor.Value.RespectBrowserAcceptHeader = respectBrowserAcceptHeader;
httpContext.Setup(o => o.RequestServices.GetService(typeof(IOptions<MvcOptions>)))
.Returns(optionsAccessor);
httpContext.Setup(o => o.RequestServices.GetService(typeof(ILogger<ObjectResult>)))
@ -946,7 +946,7 @@ namespace Microsoft.AspNet.Mvc.ActionResults
{
var options = new MvcOptions();
var optionsAccessor = new Mock<IOptions<MvcOptions>>();
optionsAccessor.SetupGet(o => o.Options).Returns(options);
optionsAccessor.SetupGet(o => o.Value).Returns(options);
var serviceCollection = new ServiceCollection();
serviceCollection.AddInstance(optionsAccessor.Object);

View File

@ -1259,8 +1259,7 @@ namespace Microsoft.AspNet.Mvc.Actions
.Callback(() => { Assert.Equal(3, sequence++); });
var options = new TestOptionsManager<MvcOptions>();
options.Options.Conventions.Add(applicationConvention.Object);
options.Value.Conventions.Add(applicationConvention.Object);
var applicationModel = new ApplicationModel();
@ -1281,7 +1280,7 @@ namespace Microsoft.AspNet.Mvc.Actions
actionModel.Parameters.Add(parameterModel);
// Act
ApplicationModelConventions.ApplyConventions(applicationModel, options.Options.Conventions);
ApplicationModelConventions.ApplyConventions(applicationModel, options.Value.Conventions);
// Assert
Assert.Equal(4, sequence);
@ -1440,7 +1439,7 @@ namespace Microsoft.AspNet.Mvc.Actions
{
foreach (var filter in filters)
{
options.Options.Filters.Add(filter);
options.Value.Filters.Add(filter);
}
}
@ -1476,7 +1475,7 @@ namespace Microsoft.AspNet.Mvc.Actions
IApplicationModelConvention convention)
{
var options = new TestOptionsManager<MvcOptions>();
options.Options.Conventions.Add(convention);
options.Value.Conventions.Add(convention);
var controllerTypeProvider = new StaticControllerTypeProvider(new[] { controllerTypeInfo });
var modelProvider = new DefaultApplicationModelProvider(options);

View File

@ -2004,7 +2004,7 @@ namespace Microsoft.AspNet.Mvc.Actions
var optionsAccessor = new Mock<IOptions<MvcOptions>>();
optionsAccessor
.SetupGet(o => o.Options)
.SetupGet(o => o.Value)
.Returns(options);
httpContext

View File

@ -34,8 +34,8 @@ namespace Microsoft.AspNet.Mvc.ApplicationModels
{
// Arrange
var options = new TestOptionsManager<AuthorizationOptions>();
options.Options.AddPolicy("Base", policy => policy.RequireClaim("Basic").RequireClaim("Basic2"));
options.Options.AddPolicy("Derived", policy => policy.RequireClaim("Derived"));
options.Value.AddPolicy("Base", policy => policy.RequireClaim("Basic").RequireClaim("Basic2"));
options.Value.AddPolicy("Derived", policy => policy.RequireClaim("Derived"));
var provider = new AuthorizationApplicationModelProvider(options);
var defaultProvider = new DefaultApplicationModelProvider(new TestOptionsManager<MvcOptions>());

View File

@ -1219,7 +1219,7 @@ namespace Microsoft.AspNet.Mvc.ApplicationModels
IOptions<MvcOptions> options)
: base(options)
{
Options = options.Options;
Options = options.Value;
}
public MvcOptions Options { get; }

View File

@ -388,7 +388,7 @@ namespace Microsoft.AspNet.Mvc.Formatters
OptionsManager = new TestOptionsManager<MvcOptions>();
// Setup options on mock service provider
Options = OptionsManager.Options;
Options = OptionsManager.Value;
// Set up default output formatters.
Options.OutputFormatters.Add(new HttpNoContentOutputFormatter());

View File

@ -0,0 +1,17 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.Framework.OptionsModel;
namespace Microsoft.AspNet.Mvc
{
public class MockMvcOptionsAccessor : IOptions<MvcOptions>
{
public MockMvcOptionsAccessor()
{
Value = new MvcOptions();
}
public MvcOptions Value { get; private set; }
}
}

View File

@ -189,7 +189,7 @@ namespace Microsoft.AspNet.Mvc
{
foreach (var p in cacheProfiles)
{
optionsAccessor.Options.CacheProfiles.Add(p.Key, p.Value);
optionsAccessor.Value.CacheProfiles.Add(p.Key, p.Value);
}
}

View File

@ -60,7 +60,7 @@ namespace Microsoft.AspNet.Mvc.Routing
private static decimal Compute(string template)
{
var options = new Mock<IOptions<RouteOptions>>();
options.SetupGet(o => o.Options).Returns(new RouteOptions());
options.SetupGet(o => o.Value).Returns(new RouteOptions());
var parsed = TemplateParser.Parse(template);
return AttributeRoutePrecedence.Compute(parsed);

View File

@ -186,7 +186,7 @@ namespace Microsoft.AspNet.Mvc.Routing
var routeOptions = new Mock<IOptions<RouteOptions>>();
routeOptions
.SetupGet(o => o.Options)
.SetupGet(o => o.Value)
.Returns(new RouteOptions());
services

View File

@ -1729,7 +1729,7 @@ namespace Microsoft.AspNet.Mvc.Routing
{
var options = new RouteOptions();
var optionsMock = new Mock<IOptions<RouteOptions>>();
optionsMock.SetupGet(o => o.Options).Returns(options);
optionsMock.SetupGet(o => o.Value).Returns(options);
return new DefaultInlineConstraintResolver(optionsMock.Object);
}

View File

@ -951,7 +951,7 @@ namespace Microsoft.AspNet.Mvc
var optionsAccessor = new Mock<IOptions<RouteOptions>>();
optionsAccessor
.SetupGet(o => o.Options)
.SetupGet(o => o.Value)
.Returns(new RouteOptions());
services
.Setup(s => s.GetService(typeof(IOptions<RouteOptions>)))

View File

@ -59,7 +59,7 @@ namespace Microsoft.AspNet.Mvc.IntegrationTests
public static IObjectModelValidator GetObjectValidator(MvcOptions options = null)
{
options = options ?? new TestMvcOptions().Options;
options = options ?? new TestMvcOptions().Value;
options.MaxModelValidationErrors = 5;
var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider();
return new DefaultObjectValidator(
@ -80,7 +80,7 @@ namespace Microsoft.AspNet.Mvc.IntegrationTests
httpContext.RequestServices.GetRequiredService<IActionContextAccessor>();
actionContextAccessor.ActionContext = actionContext;
var options = new TestMvcOptions().Options;
var options = new TestMvcOptions().Value;
if (updateOptions != null)
{
updateOptions(options);

View File

@ -11,17 +11,12 @@ namespace Microsoft.AspNet.Mvc.IntegrationTests
{
public TestMvcOptions()
{
Options = new MvcOptions();
MvcCoreMvcOptionsSetup.ConfigureMvc(Options);
MvcDataAnnotationsMvcOptionsSetup.ConfigureMvc(Options);
MvcJsonMvcOptionsSetup.ConfigureMvc(Options, SerializerSettingsProvider.CreateSerializerSettings());
Value = new MvcOptions();
MvcCoreMvcOptionsSetup.ConfigureMvc(Value);
MvcDataAnnotationsMvcOptionsSetup.ConfigureMvc(Value);
MvcJsonMvcOptionsSetup.ConfigureMvc(Value, SerializerSettingsProvider.CreateSerializerSettings());
}
public MvcOptions Options { get; }
public MvcOptions GetNamedOptions(string name)
{
throw new NotImplementedException();
}
public MvcOptions Value { get; }
}
}

View File

@ -123,11 +123,13 @@ namespace Microsoft.AspNet.Mvc.Localization.Internal
Assert.Equal(typeof(IConfigureOptions<RazorViewEngineOptions>), services[0].ServiceType);
Assert.Equal(ServiceLifetime.Singleton, services[0].Lifetime);
Assert.Equal(0, ((IConfigureOptions<RazorViewEngineOptions>)services[0].ImplementationInstance).Order);
// REVIEW: What should this be replaced with?
//Assert.Equal(0, ((IConfigureOptions<RazorViewEngineOptions>)services[0].ImplementationInstance).Order);
Assert.Equal(typeof(IConfigureOptions<RazorViewEngineOptions>), services[1].ServiceType);
Assert.Equal(ServiceLifetime.Singleton, services[1].Lifetime);
Assert.Equal(-1000, ((IConfigureOptions<RazorViewEngineOptions>)services[1].ImplementationInstance).Order);
// REVIEW: What should this be replaced with?
//Assert.Equal(-1000, ((IConfigureOptions<RazorViewEngineOptions>)services[1].ImplementationInstance).Order);
Assert.Equal(typeof(IHtmlLocalizerFactory), services[2].ServiceType);
Assert.Equal(typeof(HtmlLocalizerFactory), services[2].ImplementationType);

View File

@ -218,7 +218,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Compilation
FileProvider = fileProvider ?? new TestFileProvider()
};
var options = new Mock<IOptions<RazorViewEngineOptions>>();
options.SetupGet(o => o.Options)
options.SetupGet(o => o.Value)
.Returns(razorViewEngineOptions);
return options.Object;

View File

@ -267,7 +267,7 @@ public class NotRazorPrefixType {}";
var fileProvider = new TestFileProvider();
fileProvider.AddFile(viewPath, "view-content");
var options = new Mock<IOptions<RazorViewEngineOptions>>();
options.SetupGet(o => o.Options)
options.SetupGet(o => o.Value)
.Returns(new RazorViewEngineOptions
{
FileProvider = fileProvider
@ -416,7 +416,7 @@ public class NotRazorPrefixType {}";
FileProvider = fileProvider ?? new TestFileProvider()
};
var options = new Mock<IOptions<RazorViewEngineOptions>>();
options.SetupGet(o => o.Options)
options.SetupGet(o => o.Value)
.Returns(razorViewEngineOptions);
return options.Object;

View File

@ -1112,7 +1112,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
}
var optionsAccessor = new Mock<IOptions<RazorViewEngineOptions>>();
optionsAccessor.SetupGet(v => v.Options)
optionsAccessor.SetupGet(v => v.Value)
.Returns(options);
return optionsAccessor.Object;
}

View File

@ -100,7 +100,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{
var mockOptions = new Mock<IOptions<MvcViewOptions>>();
mockOptions
.SetupGet(options => options.Options)
.SetupGet(options => options.Value)
.Returns(new MvcViewOptions());
return mockOptions.Object;

View File

@ -193,8 +193,8 @@ namespace Microsoft.AspNet.Mvc
var services = GetServiceProvider();
// Act
var options = services.GetRequiredService<IOptions<MvcOptions>>().Options;
var jsonOptions = services.GetRequiredService<IOptions<MvcJsonOptions>>().Options;
var options = services.GetRequiredService<IOptions<MvcOptions>>().Value;
var jsonOptions = services.GetRequiredService<IOptions<MvcJsonOptions>>().Value;
// Assert
var jsonInputFormatters = options.InputFormatters.OfType<JsonInputFormatter>();
@ -214,7 +214,7 @@ namespace Microsoft.AspNet.Mvc
where T : class, new()
{
var serviceProvider = GetServiceProvider(action);
return serviceProvider.GetRequiredService<IOptions<T>>().Options;
return serviceProvider.GetRequiredService<IOptions<T>>().Value;
}
private static IServiceProvider GetServiceProvider(Action<IServiceCollection> action = null)

View File

@ -199,7 +199,7 @@ namespace Microsoft.AspNet.Mvc.ActionResults
serviceProvider.Setup(s => s.GetService(typeof(IOptions<MvcViewOptions>)))
.Returns(() => {
var optionsAccessor = new Mock<IOptions<MvcViewOptions>>();
optionsAccessor.SetupGet(o => o.Options)
optionsAccessor.SetupGet(o => o.Value)
.Returns(new MvcViewOptions());
return optionsAccessor.Object;
});
@ -226,7 +226,7 @@ namespace Microsoft.AspNet.Mvc.ActionResults
serviceProvider.Setup(s => s.GetService(typeof(IOptions<MvcViewOptions>)))
.Returns(() => {
var optionsAccessor = new Mock<IOptions<MvcViewOptions>>();
optionsAccessor.SetupGet(o => o.Options)
optionsAccessor.SetupGet(o => o.Value)
.Returns(new MvcViewOptions());
return optionsAccessor.Object;
});

View File

@ -216,7 +216,7 @@ namespace Microsoft.AspNet.Mvc.ActionResults
serviceProvider.Setup(s => s.GetService(typeof(IOptions<MvcViewOptions>)))
.Returns(() => {
var optionsAccessor = new Mock<IOptions<MvcViewOptions>>();
optionsAccessor.SetupGet(o => o.Options)
optionsAccessor.SetupGet(o => o.Value)
.Returns(new MvcViewOptions());
return optionsAccessor.Object;
});
@ -310,7 +310,7 @@ namespace Microsoft.AspNet.Mvc.ActionResults
.Returns(new Mock<ILogger<ViewResult>>().Object);
var optionsAccessor = new Mock<IOptions<MvcViewOptions>>();
optionsAccessor.SetupGet(o => o.Options)
optionsAccessor.SetupGet(o => o.Value)
.Returns(new MvcViewOptions());
serviceProvider.Setup(s => s.GetService(typeof(IOptions<MvcViewOptions>)))

View File

@ -9,14 +9,9 @@ namespace Microsoft.AspNet.Mvc
{
public MockMvcViewOptionsAccessor()
{
Options = new MvcViewOptions();
Value = new MvcViewOptions();
}
public MvcViewOptions Options { get; private set; }
public MvcViewOptions GetNamedOptions(string name)
{
return Options;
}
public MvcViewOptions Value { get; private set; }
}
}

View File

@ -574,7 +574,7 @@ namespace Microsoft.AspNet.Mvc
var routeOptions = new RouteOptions();
var accessor = new Mock<IOptions<RouteOptions>>();
accessor
.SetupGet(options => options.Options)
.SetupGet(options => options.Value)
.Returns(routeOptions);
serviceCollection.AddInstance<IOptions<RouteOptions>>(accessor.Object);

View File

@ -640,13 +640,13 @@ namespace Microsoft.AspNet.Mvc.Rendering
private static IHtmlGenerator GetGenerator(IModelMetadataProvider metadataProvider)
{
var mvcViewOptionsAccessor = new Mock<IOptions<MvcViewOptions>>();
mvcViewOptionsAccessor.SetupGet(accessor => accessor.Options).Returns(new MvcViewOptions());
mvcViewOptionsAccessor.SetupGet(accessor => accessor.Value).Returns(new MvcViewOptions());
var htmlEncoder = Mock.Of<IHtmlEncoder>();
var antiforgery = Mock.Of<IAntiforgery>();
var optionsAccessor = new Mock<IOptions<MvcOptions>>();
optionsAccessor
.SetupGet(o => o.Options)
.SetupGet(o => o.Value)
.Returns(new MvcOptions());
return new DefaultHtmlGenerator(

View File

@ -221,7 +221,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
options.ClientModelValidatorProviders.Add(new DataAnnotationsClientModelValidatorProvider());
var optionsAccessor = new Mock<IOptions<MvcViewOptions>>();
optionsAccessor
.SetupGet(o => o.Options)
.SetupGet(o => o.Value)
.Returns(options);
var serviceProvider = new Mock<IServiceProvider>();

View File

@ -20,8 +20,8 @@ namespace Microsoft.AspNet.Mvc.Rendering
var viewEngine1 = Mock.Of<IViewEngine>();
var viewEngine2 = Mock.Of<IViewEngine>();
var optionsAccessor = new MockMvcViewOptionsAccessor();
optionsAccessor.Options.ViewEngines.Add(viewEngine1);
optionsAccessor.Options.ViewEngines.Add(viewEngine2);
optionsAccessor.Value.ViewEngines.Add(viewEngine1);
optionsAccessor.Value.ViewEngines.Add(viewEngine2);
var compositeViewEngine = new CompositeViewEngine(optionsAccessor);
// Act
@ -58,7 +58,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
engine.Setup(e => e.FindView(It.IsAny<ActionContext>(), It.IsAny<string>()))
.Returns(ViewEngineResult.NotFound(viewName, new[] { "controller/test-view" }));
var optionsAccessor = new MockMvcViewOptionsAccessor();
optionsAccessor.Options.ViewEngines.Add(engine.Object);
optionsAccessor.Value.ViewEngines.Add(engine.Object);
var compositeViewEngine = new CompositeViewEngine(optionsAccessor);
// Act
@ -79,7 +79,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
engine.Setup(e => e.FindView(It.IsAny<ActionContext>(), It.IsAny<string>()))
.Returns(ViewEngineResult.Found(viewName, view));
var optionsAccessor = new MockMvcViewOptionsAccessor();
optionsAccessor.Options.ViewEngines.Add(engine.Object);
optionsAccessor.Value.ViewEngines.Add(engine.Object);
var compositeViewEngine = new CompositeViewEngine(optionsAccessor);
// Act
@ -108,9 +108,9 @@ namespace Microsoft.AspNet.Mvc.Rendering
.Returns(ViewEngineResult.Found(viewName, view3));
var optionsAccessor = new MockMvcViewOptionsAccessor();
optionsAccessor.Options.ViewEngines.Add(engine1.Object);
optionsAccessor.Options.ViewEngines.Add(engine2.Object);
optionsAccessor.Options.ViewEngines.Add(engine3.Object);
optionsAccessor.Value.ViewEngines.Add(engine1.Object);
optionsAccessor.Value.ViewEngines.Add(engine2.Object);
optionsAccessor.Value.ViewEngines.Add(engine3.Object);
var compositeViewEngine = new CompositeViewEngine(optionsAccessor);
// Act
@ -138,9 +138,9 @@ namespace Microsoft.AspNet.Mvc.Rendering
.Returns(ViewEngineResult.NotFound(viewName, new[] { "4", "5" }));
var optionsAccessor = new MockMvcViewOptionsAccessor();
optionsAccessor.Options.ViewEngines.Add(engine1.Object);
optionsAccessor.Options.ViewEngines.Add(engine2.Object);
optionsAccessor.Options.ViewEngines.Add(engine3.Object);
optionsAccessor.Value.ViewEngines.Add(engine1.Object);
optionsAccessor.Value.ViewEngines.Add(engine2.Object);
optionsAccessor.Value.ViewEngines.Add(engine3.Object);
var compositeViewEngine = new CompositeViewEngine(optionsAccessor);
// Act
@ -197,7 +197,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
engine.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>()))
.Returns(ViewEngineResult.Found(viewName, view));
var optionsAccessor = new MockMvcViewOptionsAccessor();
optionsAccessor.Options.ViewEngines.Add(engine.Object);
optionsAccessor.Value.ViewEngines.Add(engine.Object);
var compositeViewEngine = new CompositeViewEngine(optionsAccessor);
// Act
@ -226,9 +226,9 @@ namespace Microsoft.AspNet.Mvc.Rendering
.Returns(ViewEngineResult.Found(viewName, view3));
var optionsAccessor = new MockMvcViewOptionsAccessor();
optionsAccessor.Options.ViewEngines.Add(engine1.Object);
optionsAccessor.Options.ViewEngines.Add(engine2.Object);
optionsAccessor.Options.ViewEngines.Add(engine3.Object);
optionsAccessor.Value.ViewEngines.Add(engine1.Object);
optionsAccessor.Value.ViewEngines.Add(engine2.Object);
optionsAccessor.Value.ViewEngines.Add(engine3.Object);
var compositeViewEngine = new CompositeViewEngine(optionsAccessor);
// Act
@ -256,9 +256,9 @@ namespace Microsoft.AspNet.Mvc.Rendering
.Returns(ViewEngineResult.NotFound(viewName, new[] { "4", "5" }));
var optionsAccessor = new MockMvcViewOptionsAccessor();
optionsAccessor.Options.ViewEngines.Add(engine1.Object);
optionsAccessor.Options.ViewEngines.Add(engine2.Object);
optionsAccessor.Options.ViewEngines.Add(engine3.Object);
optionsAccessor.Value.ViewEngines.Add(engine1.Object);
optionsAccessor.Value.ViewEngines.Add(engine2.Object);
optionsAccessor.Value.ViewEngines.Add(engine3.Object);
var compositeViewEngine = new CompositeViewEngine(optionsAccessor);
// Act

View File

@ -73,7 +73,7 @@ namespace System.Web.Http
options.OutputFormatters.Add(new JsonOutputFormatter());
var optionsAccessor = new Mock<IOptions<MvcOptions>>();
optionsAccessor.SetupGet(o => o.Options)
optionsAccessor.SetupGet(o => o.Value)
.Returns(options);
var actionBindingContext = new ActionBindingContext { OutputFormatters = options.OutputFormatters };

View File

@ -73,7 +73,7 @@ namespace System.Web.Http
options.OutputFormatters.Add(new JsonOutputFormatter());
var optionsAccessor = new Mock<IOptions<MvcOptions>>();
optionsAccessor.SetupGet(o => o.Options)
optionsAccessor.SetupGet(o => o.Value)
.Returns(options);
var actionBindingContext = new ActionBindingContext { OutputFormatters = options.OutputFormatters };

View File

@ -86,7 +86,7 @@ namespace System.Web.Http
options.OutputFormatters.Add(new JsonOutputFormatter());
var optionsAccessor = new Mock<IOptions<MvcOptions>>();
optionsAccessor.SetupGet(o => o.Options)
optionsAccessor.SetupGet(o => o.Value)
.Returns(options);
var actionBindingContext = new ActionBindingContext { OutputFormatters = options.OutputFormatters };

View File

@ -74,7 +74,7 @@ namespace System.Web.Http
options.OutputFormatters.Add(new JsonOutputFormatter());
var optionsAccessor = new Mock<IOptions<MvcOptions>>();
optionsAccessor.SetupGet(o => o.Options)
optionsAccessor.SetupGet(o => o.Value)
.Returns(options);
var actionBindingContext = new ActionBindingContext { OutputFormatters = options.OutputFormatters };

View File

@ -383,12 +383,12 @@ namespace System.Web.Http
var optionsAccessor = new Mock<IOptions<MvcOptions>>();
optionsAccessor
.SetupGet(o => o.Options)
.SetupGet(o => o.Value)
.Returns(options);
var authorizationOptionsAccessor = new Mock<IOptions<AuthorizationOptions>>();
authorizationOptionsAccessor
.SetupGet(o => o.Options)
.SetupGet(o => o.Value)
.Returns(new AuthorizationOptions());
var modelProvider = new DefaultApplicationModelProvider(optionsAccessor.Object);

View File

@ -68,7 +68,7 @@ namespace System.Net.Http
options.Formatters.AddRange(new MediaTypeFormatterCollection());
var optionsAccessor = new Mock<IOptions<WebApiCompatShimOptions>>();
optionsAccessor.SetupGet(o => o.Options).Returns(options);
optionsAccessor.SetupGet(o => o.Value).Returns(options);
services
.Setup(s => s.GetService(typeof(IOptions<WebApiCompatShimOptions>)))
@ -101,7 +101,7 @@ namespace System.Net.Http
options.Formatters.AddRange(new MediaTypeFormatterCollection());
var optionsAccessor = new Mock<IOptions<WebApiCompatShimOptions>>();
optionsAccessor.SetupGet(o => o.Options).Returns(options);
optionsAccessor.SetupGet(o => o.Value).Returns(options);
services
.Setup(s => s.GetService(typeof(IOptions<WebApiCompatShimOptions>)))
@ -322,7 +322,7 @@ namespace System.Net.Http
}
var optionsAccessor = new Mock<IOptions<WebApiCompatShimOptions>>();
optionsAccessor.SetupGet(o => o.Options).Returns(options);
optionsAccessor.SetupGet(o => o.Value).Returns(options);
var services = new Mock<IServiceProvider>(MockBehavior.Strict);
services