Fix for #996 - ViewComponentInvoker should get TypeActivator from DI.
This commit is contained in:
parent
7ae5e66ccd
commit
7012b3fc2b
|
|
@ -14,17 +14,20 @@ namespace Microsoft.AspNet.Mvc
|
||||||
public class DefaultViewComponentInvoker : IViewComponentInvoker
|
public class DefaultViewComponentInvoker : IViewComponentInvoker
|
||||||
{
|
{
|
||||||
private readonly IServiceProvider _serviceProvider;
|
private readonly IServiceProvider _serviceProvider;
|
||||||
|
private readonly ITypeActivator _activator;
|
||||||
private readonly TypeInfo _componentType;
|
private readonly TypeInfo _componentType;
|
||||||
private readonly IViewComponentActivator _viewComponentActivator;
|
private readonly IViewComponentActivator _viewComponentActivator;
|
||||||
private readonly object[] _args;
|
private readonly object[] _args;
|
||||||
|
|
||||||
public DefaultViewComponentInvoker(
|
public DefaultViewComponentInvoker(
|
||||||
[NotNull] IServiceProvider serviceProvider,
|
[NotNull] IServiceProvider serviceProvider,
|
||||||
|
[NotNull] ITypeActivator activator,
|
||||||
[NotNull] IViewComponentActivator viewComponentActivator,
|
[NotNull] IViewComponentActivator viewComponentActivator,
|
||||||
[NotNull] TypeInfo componentType,
|
[NotNull] TypeInfo componentType,
|
||||||
object[] args)
|
object[] args)
|
||||||
{
|
{
|
||||||
_serviceProvider = serviceProvider;
|
_serviceProvider = serviceProvider;
|
||||||
|
_activator = activator;
|
||||||
_componentType = componentType;
|
_componentType = componentType;
|
||||||
_viewComponentActivator = viewComponentActivator;
|
_viewComponentActivator = viewComponentActivator;
|
||||||
_args = args ?? new object[0];
|
_args = args ?? new object[0];
|
||||||
|
|
@ -74,8 +77,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
|
|
||||||
private object CreateComponent([NotNull] ViewContext context)
|
private object CreateComponent([NotNull] ViewContext context)
|
||||||
{
|
{
|
||||||
var activator = _serviceProvider.GetRequiredService<ITypeActivator>();
|
var component = _activator.CreateInstance(_serviceProvider, _componentType.AsType());
|
||||||
var component = activator.CreateInstance(_serviceProvider, _componentType.AsType());
|
|
||||||
_viewComponentActivator.Activate(component, context);
|
_viewComponentActivator.Activate(component, context);
|
||||||
return component;
|
return component;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,19 +2,23 @@
|
||||||
// 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 Microsoft.AspNet.Mvc.Core;
|
using Microsoft.Framework.DependencyInjection;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
public class DefaultViewComponentInvokerProvider : IViewComponentInvokerProvider
|
public class DefaultViewComponentInvokerProvider : IViewComponentInvokerProvider
|
||||||
{
|
{
|
||||||
private readonly IServiceProvider _serviceProvider;
|
private readonly IServiceProvider _serviceProvider;
|
||||||
|
private readonly ITypeActivator _typeActivator;
|
||||||
private readonly IViewComponentActivator _viewComponentActivator;
|
private readonly IViewComponentActivator _viewComponentActivator;
|
||||||
|
|
||||||
public DefaultViewComponentInvokerProvider(IServiceProvider serviceProvider,
|
public DefaultViewComponentInvokerProvider(
|
||||||
|
IServiceProvider serviceProvider,
|
||||||
|
ITypeActivator typeActivator,
|
||||||
IViewComponentActivator viewComponentActivator)
|
IViewComponentActivator viewComponentActivator)
|
||||||
{
|
{
|
||||||
_serviceProvider = serviceProvider;
|
_serviceProvider = serviceProvider;
|
||||||
|
_typeActivator = typeActivator;
|
||||||
_viewComponentActivator = viewComponentActivator;
|
_viewComponentActivator = viewComponentActivator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -25,9 +29,13 @@ namespace Microsoft.AspNet.Mvc
|
||||||
|
|
||||||
public void Invoke([NotNull] ViewComponentInvokerProviderContext context, [NotNull] Action callNext)
|
public void Invoke([NotNull] ViewComponentInvokerProviderContext context, [NotNull] Action callNext)
|
||||||
{
|
{
|
||||||
context.Result =
|
context.Result = new DefaultViewComponentInvoker(
|
||||||
new DefaultViewComponentInvoker(
|
_serviceProvider,
|
||||||
_serviceProvider, _viewComponentActivator, context.ComponentType, context.Arguments);
|
_typeActivator,
|
||||||
|
_viewComponentActivator,
|
||||||
|
context.ComponentType,
|
||||||
|
context.Arguments);
|
||||||
|
|
||||||
callNext();
|
callNext();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue