Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 9 additions & 20 deletions src/Mvc/Mvc.Razor/src/Infrastructure/DefaultTagHelperActivator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.Extensions.DependencyInjection;

namespace Microsoft.AspNetCore.Mvc.Razor.Infrastructure
{
Expand All @@ -13,22 +13,6 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Infrastructure
/// </summary>
internal class DefaultTagHelperActivator : ITagHelperActivator
{
private readonly ITypeActivatorCache _typeActivatorCache;

/// <summary>
/// Instantiates a new <see cref="DefaultTagHelperActivator"/> instance.
/// </summary>
/// <param name="typeActivatorCache">The <see cref="ITypeActivatorCache"/>.</param>
public DefaultTagHelperActivator(ITypeActivatorCache typeActivatorCache)
{
if (typeActivatorCache == null)
{
throw new ArgumentNullException(nameof(typeActivatorCache));
}

_typeActivatorCache = typeActivatorCache;
}

/// <inheritdoc />
public TTagHelper Create<TTagHelper>(ViewContext context)
where TTagHelper : ITagHelper
Expand All @@ -38,9 +22,14 @@ public TTagHelper Create<TTagHelper>(ViewContext context)
throw new ArgumentNullException(nameof(context));
}

return _typeActivatorCache.CreateInstance<TTagHelper>(
context.HttpContext.RequestServices,
typeof(TTagHelper));
return Cache<TTagHelper>.Create(context.HttpContext.RequestServices);
}

private static class Cache<TTagHelper>
{
private static readonly ObjectFactory _objectFactory = ActivatorUtilities.CreateFactory(typeof(TTagHelper), Type.EmptyTypes);

public static TTagHelper Create(IServiceProvider serviceProvider) => (TTagHelper)_objectFactory(serviceProvider, arguments: null);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using System.IO;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Abstractions;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewEngines;
Expand All @@ -30,7 +29,7 @@ public void CreateTagHelper_InitializesTagHelpers()
var viewContext = MakeViewContext(httpContext);
var viewDataValue = new object();
viewContext.ViewData.Add("TestData", viewDataValue);
var activator = new DefaultTagHelperActivator(new TypeActivatorCache());
var activator = new DefaultTagHelperActivator();

// Act
var helper = activator.Create<TestTagHelper>(viewContext);
Expand Down
5 changes: 1 addition & 4 deletions src/Mvc/Mvc.Razor/test/RazorPageCreateTagHelperTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -82,17 +82,14 @@ private static TestRazorPage CreateTestRazorPage()
modelExpressionProvider);

var serviceProvider = new Mock<IServiceProvider>();
var typeActivator = new TypeActivatorCache();
var tagHelperActivator = new DefaultTagHelperActivator(typeActivator);
var tagHelperActivator = new DefaultTagHelperActivator();
var myService = new MyService();
serviceProvider.Setup(mock => mock.GetService(typeof(MyService)))
.Returns(myService);
serviceProvider.Setup(mock => mock.GetService(typeof(ITagHelperFactory)))
.Returns(new DefaultTagHelperFactory(tagHelperActivator));
serviceProvider.Setup(mock => mock.GetService(typeof(ITagHelperActivator)))
.Returns(tagHelperActivator);
serviceProvider.Setup(mock => mock.GetService(typeof(ITypeActivatorCache)))
.Returns(typeActivator);
serviceProvider.Setup(mock => mock.GetService(It.Is<Type>(serviceType =>
serviceType.IsGenericType && serviceType.GetGenericTypeDefinition() == typeof(IEnumerable<>))))
.Returns<Type>(serviceType =>
Expand Down
7 changes: 3 additions & 4 deletions src/Mvc/Mvc.TagHelpers/test/DefaultTagHelperActivatorTest.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
// Copyright (c) .NET Foundation. All rights reserved.
// 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 System.Text.Encodings.Web;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.AspNetCore.Mvc.Razor.Infrastructure;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.Routing;
Expand All @@ -29,7 +28,7 @@ public class DefaultTagHelperActivatorTest
public void ScriptTagHelper_DoesNotUseMemoryCacheInstanceFromDI()
{
// Arrange
var activator = new DefaultTagHelperActivator(new TypeActivatorCache());
var activator = new DefaultTagHelperActivator();
var viewContext = CreateViewContext();

var scriptTagHelper = activator.Create<ScriptTagHelper>(viewContext);
Expand All @@ -43,7 +42,7 @@ public void ScriptTagHelper_DoesNotUseMemoryCacheInstanceFromDI()
public void LinkTagHelper_DoesNotUseMemoryCacheInstanceFromDI()
{
// Arrange
var activator = new DefaultTagHelperActivator(new TypeActivatorCache());
var activator = new DefaultTagHelperActivator();
var viewContext = CreateViewContext();

var linkTagHelper = activator.Create<LinkTagHelper>(viewContext);
Expand Down