From 7012b3fc2ba63af24dd981c54b076bca7cf3c5d9 Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Thu, 23 Oct 2014 13:48:11 -0700 Subject: [PATCH] Fix for #996 - ViewComponentInvoker should get TypeActivator from DI. --- .../DefaultViewComponentInvoker.cs | 6 ++++-- .../DefaultViewComponentInvokerProvider.cs | 18 +++++++++++++----- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/Microsoft.AspNet.Mvc.Core/ViewComponents/DefaultViewComponentInvoker.cs b/src/Microsoft.AspNet.Mvc.Core/ViewComponents/DefaultViewComponentInvoker.cs index b5e4d974dc..30d632c6ad 100644 --- a/src/Microsoft.AspNet.Mvc.Core/ViewComponents/DefaultViewComponentInvoker.cs +++ b/src/Microsoft.AspNet.Mvc.Core/ViewComponents/DefaultViewComponentInvoker.cs @@ -14,17 +14,20 @@ namespace Microsoft.AspNet.Mvc public class DefaultViewComponentInvoker : IViewComponentInvoker { private readonly IServiceProvider _serviceProvider; + private readonly ITypeActivator _activator; private readonly TypeInfo _componentType; private readonly IViewComponentActivator _viewComponentActivator; private readonly object[] _args; public DefaultViewComponentInvoker( [NotNull] IServiceProvider serviceProvider, + [NotNull] ITypeActivator activator, [NotNull] IViewComponentActivator viewComponentActivator, [NotNull] TypeInfo componentType, object[] args) { _serviceProvider = serviceProvider; + _activator = activator; _componentType = componentType; _viewComponentActivator = viewComponentActivator; _args = args ?? new object[0]; @@ -74,8 +77,7 @@ namespace Microsoft.AspNet.Mvc private object CreateComponent([NotNull] ViewContext context) { - var activator = _serviceProvider.GetRequiredService(); - var component = activator.CreateInstance(_serviceProvider, _componentType.AsType()); + var component = _activator.CreateInstance(_serviceProvider, _componentType.AsType()); _viewComponentActivator.Activate(component, context); return component; } diff --git a/src/Microsoft.AspNet.Mvc.Core/ViewComponents/DefaultViewComponentInvokerProvider.cs b/src/Microsoft.AspNet.Mvc.Core/ViewComponents/DefaultViewComponentInvokerProvider.cs index 6a25329604..e2cc9efde4 100644 --- a/src/Microsoft.AspNet.Mvc.Core/ViewComponents/DefaultViewComponentInvokerProvider.cs +++ b/src/Microsoft.AspNet.Mvc.Core/ViewComponents/DefaultViewComponentInvokerProvider.cs @@ -2,19 +2,23 @@ // 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; +using Microsoft.Framework.DependencyInjection; namespace Microsoft.AspNet.Mvc { public class DefaultViewComponentInvokerProvider : IViewComponentInvokerProvider { private readonly IServiceProvider _serviceProvider; + private readonly ITypeActivator _typeActivator; private readonly IViewComponentActivator _viewComponentActivator; - public DefaultViewComponentInvokerProvider(IServiceProvider serviceProvider, + public DefaultViewComponentInvokerProvider( + IServiceProvider serviceProvider, + ITypeActivator typeActivator, IViewComponentActivator viewComponentActivator) { _serviceProvider = serviceProvider; + _typeActivator = typeActivator; _viewComponentActivator = viewComponentActivator; } @@ -25,9 +29,13 @@ namespace Microsoft.AspNet.Mvc public void Invoke([NotNull] ViewComponentInvokerProviderContext context, [NotNull] Action callNext) { - context.Result = - new DefaultViewComponentInvoker( - _serviceProvider, _viewComponentActivator, context.ComponentType, context.Arguments); + context.Result = new DefaultViewComponentInvoker( + _serviceProvider, + _typeActivator, + _viewComponentActivator, + context.ComponentType, + context.Arguments); + callNext(); } }