IServiceProvider.GetService now returns null for missing services
Previously GetService would throw if the requested service was missing. This commit updates MVC to account for the change in behavior.
This commit is contained in:
parent
f8035d6b04
commit
54ac14fa0f
|
|
@ -89,7 +89,7 @@ namespace Microsoft.AspNet.Mvc
|
|||
valueAccessor = (actionContext) =>
|
||||
{
|
||||
var serviceProvider = actionContext.HttpContext.RequestServices;
|
||||
return serviceProvider.GetService(property.PropertyType);
|
||||
return serviceProvider.GetRequiredService(property.PropertyType);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
using System;
|
||||
using System.Diagnostics;
|
||||
using Microsoft.AspNet.Mvc.Core;
|
||||
using Microsoft.Framework.DependencyInjection;
|
||||
|
||||
namespace Microsoft.AspNet.Mvc
|
||||
{
|
||||
|
|
@ -22,7 +23,7 @@ namespace Microsoft.AspNet.Mvc
|
|||
|
||||
public IFilter CreateInstance([NotNull] IServiceProvider serviceProvider)
|
||||
{
|
||||
var service = serviceProvider.GetService(ServiceType);
|
||||
var service = serviceProvider.GetRequiredService(ServiceType);
|
||||
|
||||
var filter = service as IFilter;
|
||||
if (filter == null)
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ namespace Microsoft.AspNet.Mvc
|
|||
|
||||
var args =
|
||||
initializeMethod.GetParameters()
|
||||
.Select(p => services.GetService(p.ParameterType))
|
||||
.Select(p => services.GetRequiredService(p.ParameterType))
|
||||
.ToArray();
|
||||
|
||||
initializeMethod.Invoke(obj, args);
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ namespace Microsoft.AspNet.Mvc.Internal
|
|||
/// <param name="serviceType">The type of service which needs to be searched for.</param>
|
||||
public static void ThrowIfMvcNotRegistered(IServiceProvider services)
|
||||
{
|
||||
if (services.GetServiceOrNull(typeof(MvcMarkerService)) == null)
|
||||
if (services.GetService(typeof(MvcMarkerService)) == null)
|
||||
{
|
||||
throw new InvalidOperationException(Resources.FormatUnableToFindServices(
|
||||
"IServiceCollection.AddMvc()",
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ using System.Collections.Concurrent;
|
|||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using Microsoft.AspNet.Mvc.Rendering;
|
||||
using Microsoft.Framework.DependencyInjection;
|
||||
|
||||
namespace Microsoft.AspNet.Mvc
|
||||
{
|
||||
|
|
@ -73,7 +74,7 @@ namespace Microsoft.AspNet.Mvc
|
|||
valueAccessor = (viewContext) =>
|
||||
{
|
||||
var serviceProvider = viewContext.HttpContext.RequestServices;
|
||||
var service = serviceProvider.GetService(property.PropertyType);
|
||||
var service = serviceProvider.GetRequiredService(property.PropertyType);
|
||||
if (typeof(ICanHasViewContext).IsAssignableFrom(property.PropertyType))
|
||||
{
|
||||
((ICanHasViewContext)service).Contextualize(viewContext);
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ using System.Collections.Concurrent;
|
|||
using System.Reflection;
|
||||
using Microsoft.AspNet.Mvc.Rendering;
|
||||
using Microsoft.AspNet.Razor.Runtime.TagHelpers;
|
||||
using Microsoft.Framework.DependencyInjection;
|
||||
|
||||
namespace Microsoft.AspNet.Mvc.Razor
|
||||
{
|
||||
|
|
@ -52,7 +53,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
valueAccessor = (viewContext) =>
|
||||
{
|
||||
var serviceProvider = viewContext.HttpContext.RequestServices;
|
||||
var service = serviceProvider.GetService(property.PropertyType);
|
||||
var service = serviceProvider.GetRequiredService(property.PropertyType);
|
||||
|
||||
var contextable = service as ICanHasViewContext;
|
||||
contextable?.Contextualize(viewContext);
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ namespace Microsoft.AspNet.Mvc.Razor
|
|||
valueAccessor = context =>
|
||||
{
|
||||
var serviceProvider = context.HttpContext.RequestServices;
|
||||
var value = serviceProvider.GetService(property.PropertyType);
|
||||
var value = serviceProvider.GetRequiredService(property.PropertyType);
|
||||
var canHasViewContext = value as ICanHasViewContext;
|
||||
if (canHasViewContext != null)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
using System;
|
||||
using Microsoft.AspNet.Http;
|
||||
using Microsoft.AspNet.Mvc.ModelBinding;
|
||||
using Microsoft.AspNet.Mvc.Rendering;
|
||||
using Microsoft.AspNet.Routing;
|
||||
using Moq;
|
||||
using Xunit;
|
||||
|
|
@ -17,12 +18,16 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
|||
public void Activate_SetsPropertiesFromActionContextHierarchy()
|
||||
{
|
||||
// Arrange
|
||||
var services = new Mock<IServiceProvider>();
|
||||
services.Setup(s => s.GetService(typeof(IUrlHelper)))
|
||||
.Returns(Mock.Of<IUrlHelper>());
|
||||
|
||||
var httpRequest = Mock.Of<HttpRequest>();
|
||||
var httpContext = new Mock<HttpContext>();
|
||||
httpContext.SetupGet(c => c.Request)
|
||||
.Returns(httpRequest);
|
||||
httpContext.SetupGet(c => c.RequestServices)
|
||||
.Returns(Mock.Of<IServiceProvider>());
|
||||
.Returns(services.Object);
|
||||
var routeContext = new RouteContext(httpContext.Object);
|
||||
var controller = new TestController();
|
||||
var context = new ActionContext(routeContext, new ActionDescriptor())
|
||||
|
|
@ -44,13 +49,17 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
|||
public void Activate_SetsViewDatDictionary()
|
||||
{
|
||||
// Arrange
|
||||
var service = new Mock<IServiceProvider>();
|
||||
service.Setup(s => s.GetService(typeof(IModelMetadataProvider)))
|
||||
.Returns(Mock.Of<IModelMetadataProvider>());
|
||||
var services = new Mock<IServiceProvider>();
|
||||
services.Setup(s => s.GetService(typeof(IModelMetadataProvider)))
|
||||
.Returns(Mock.Of<IModelMetadataProvider>());
|
||||
services.Setup(s => s.GetService(typeof(ICompositeViewEngine)))
|
||||
.Returns(Mock.Of<ICompositeViewEngine>());
|
||||
services.Setup(s => s.GetService(typeof(IUrlHelper)))
|
||||
.Returns(Mock.Of<IUrlHelper>());
|
||||
|
||||
var httpContext = new Mock<HttpContext>();
|
||||
httpContext.SetupGet(c => c.RequestServices)
|
||||
.Returns(service.Object);
|
||||
.Returns(services.Object);
|
||||
var routeContext = new RouteContext(httpContext.Object);
|
||||
var controller = new TestController();
|
||||
var context = new ActionContext(routeContext, new ActionDescriptor())
|
||||
|
|
@ -71,13 +80,13 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
|||
{
|
||||
// Arrange
|
||||
var urlHelper = Mock.Of<IUrlHelper>();
|
||||
var service = new Mock<IServiceProvider>();
|
||||
service.Setup(s => s.GetService(typeof(IUrlHelper)))
|
||||
.Returns(urlHelper);
|
||||
var services = new Mock<IServiceProvider>();
|
||||
services.Setup(s => s.GetService(typeof(IUrlHelper)))
|
||||
.Returns(urlHelper);
|
||||
|
||||
var httpContext = new Mock<HttpContext>();
|
||||
httpContext.SetupGet(c => c.RequestServices)
|
||||
.Returns(service.Object);
|
||||
.Returns(services.Object);
|
||||
var routeContext = new RouteContext(httpContext.Object);
|
||||
var controller = new TestController();
|
||||
var context = new ActionContext(routeContext, new ActionDescriptor())
|
||||
|
|
@ -97,11 +106,15 @@ namespace Microsoft.AspNet.Mvc.Core.Test
|
|||
public void Activate_IgnoresPropertiesThatAreNotDecoratedWithActivateAttribute()
|
||||
{
|
||||
// Arrange
|
||||
var services = new Mock<IServiceProvider>();
|
||||
services.Setup(s => s.GetService(typeof(IUrlHelper)))
|
||||
.Returns(Mock.Of<IUrlHelper>());
|
||||
|
||||
var httpContext = new Mock<HttpContext>();
|
||||
httpContext.SetupGet(c => c.Response)
|
||||
.Returns(Mock.Of<HttpResponse>());
|
||||
httpContext.SetupGet(c => c.RequestServices)
|
||||
.Returns(Mock.Of<IServiceProvider>());
|
||||
.Returns(services.Object);
|
||||
var routeContext = new RouteContext(httpContext.Object);
|
||||
var controller = new TestController();
|
||||
var context = new ActionContext(routeContext, new ActionDescriptor())
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ namespace Microsoft.AspNet.Mvc
|
|||
var helper = Mock.Of<IHtmlHelper<object>>();
|
||||
var serviceProvider = new Mock<IServiceProvider>();
|
||||
serviceProvider.Setup(p => p.GetService(typeof(IHtmlHelper<object>))).Returns(helper);
|
||||
serviceProvider.Setup(p => p.GetService(typeof(ICompositeViewEngine))).Returns(Mock.Of<ICompositeViewEngine>());
|
||||
var viewContext = GetViewContext(serviceProvider.Object);
|
||||
|
||||
// Act
|
||||
|
|
@ -44,6 +45,7 @@ namespace Microsoft.AspNet.Mvc
|
|||
var helper = Mock.Of<IHtmlHelper<object>>();
|
||||
var serviceProvider = new Mock<IServiceProvider>();
|
||||
serviceProvider.Setup(p => p.GetService(typeof(IHtmlHelper<object>))).Returns(helper);
|
||||
serviceProvider.Setup(p => p.GetService(typeof(ICompositeViewEngine))).Returns(Mock.Of<ICompositeViewEngine>());
|
||||
var viewContext = GetViewContext(serviceProvider.Object);
|
||||
|
||||
// Act
|
||||
|
|
@ -63,6 +65,7 @@ namespace Microsoft.AspNet.Mvc
|
|||
var serviceProvider = new Mock<IServiceProvider>();
|
||||
serviceProvider.Setup(p => p.GetService(typeof(IHtmlHelper<object>))).Returns(helper);
|
||||
serviceProvider.Setup(p => p.GetService(typeof(MyService))).Returns(myTestService);
|
||||
serviceProvider.Setup(p => p.GetService(typeof(ICompositeViewEngine))).Returns(Mock.Of<ICompositeViewEngine>());
|
||||
var viewContext = GetViewContext(serviceProvider.Object);
|
||||
var instance = new TestViewComponentWithCustomDataType();
|
||||
|
||||
|
|
|
|||
|
|
@ -34,8 +34,8 @@ namespace Microsoft.AspNet.Mvc
|
|||
// Arrange
|
||||
var services = new Mock<IServiceProvider>();
|
||||
var expectedOutput = new MvcMarkerService();
|
||||
services.Setup(o => o.GetService(typeof(IEnumerable<MvcMarkerService>)))
|
||||
.Returns(new List<MvcMarkerService> { expectedOutput });
|
||||
services.Setup(o => o.GetService(typeof(MvcMarkerService)))
|
||||
.Returns(expectedOutput);
|
||||
|
||||
// Act & Assert
|
||||
Assert.DoesNotThrow(() => MvcServicesHelper.ThrowIfMvcNotRegistered(services.Object));
|
||||
|
|
|
|||
|
|
@ -223,8 +223,8 @@ namespace Microsoft.AspNet.Mvc
|
|||
.Returns(invokerFactory);
|
||||
httpContext.Setup(h => h.RequestServices.GetService(typeof(ILoggerFactory)))
|
||||
.Returns(loggerFactory);
|
||||
httpContext.Setup(h => h.RequestServices.GetService(typeof(IEnumerable<MvcMarkerService>)))
|
||||
.Returns(new List<MvcMarkerService> { new MvcMarkerService() });
|
||||
httpContext.Setup(h => h.RequestServices.GetService(typeof(MvcMarkerService)))
|
||||
.Returns(new MvcMarkerService());
|
||||
httpContext.Setup(h => h.RequestServices.GetService(typeof(IOptions<MvcOptions>)))
|
||||
.Returns(optionsAccessor);
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ namespace Microsoft.AspNet.Builder
|
|||
{
|
||||
public static Configuration GetTestConfiguration(this IApplicationBuilder app)
|
||||
{
|
||||
var configurationProvider = app.ApplicationServices.GetServiceOrDefault<ITestConfigurationProvider>();
|
||||
var configurationProvider = app.ApplicationServices.GetService<ITestConfigurationProvider>();
|
||||
var configuration = configurationProvider == null
|
||||
? new Configuration()
|
||||
: configurationProvider.Configuration;
|
||||
|
|
|
|||
Loading…
Reference in New Issue