Skip to content
This repository was archived by the owner on Dec 14, 2018. It is now read-only.

Commit b68fae9

Browse files
author
N. Taylor Mullen
committed
Removed the TypeActivator from TagHelper creation.
- We now new up TagHelper's, requiring them to have parameterless constructors. - Added test to validate throwing. - Removed existing tests that expected the constructor injection behavior. #1303
1 parent 3dff1ca commit b68fae9

File tree

2 files changed

+10
-79
lines changed

2 files changed

+10
-79
lines changed

src/Microsoft.AspNet.Mvc.Razor/RazorPage.cs

+3-19
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ public abstract class RazorPage : IRazorPage
2525
private readonly Stack<TextWriter> _writerScopes;
2626
private TextWriter _originalWriter;
2727
private IUrlHelper _urlHelper;
28-
private ITypeActivator _typeActivator;
2928
private ITagHelperActivator _tagHelperActivator;
3029
private bool _renderedBody;
3130

@@ -114,19 +113,6 @@ public dynamic ViewBag
114113
/// <inheritdoc />
115114
public abstract Task ExecuteAsync();
116115

117-
private ITypeActivator TypeActivator
118-
{
119-
get
120-
{
121-
if(_typeActivator == null)
122-
{
123-
_typeActivator = ViewContext.HttpContext.RequestServices.GetService<ITypeActivator>();
124-
}
125-
126-
return _typeActivator;
127-
}
128-
}
129-
130116
private ITagHelperActivator TagHelperActivator
131117
{
132118
get
@@ -139,19 +125,17 @@ private ITagHelperActivator TagHelperActivator
139125
return _tagHelperActivator;
140126
}
141127
}
142-
143128
/// <summary>
144129
/// Creates and activates a <see cref="ITagHelper"/>.
145130
/// </summary>
146131
/// <typeparam name="TTagHelper">A <see cref="ITagHelper"/> type.</typeparam>
147132
/// <returns>The activated <see cref="ITagHelper"/>.</returns>
148133
/// <remarks>
149-
/// If the <see cref= "ITagHelper" /> implements <see cref="ICanHasViewContext"/> the
150-
/// <see cref="ICanHasViewContext.Contextualize(ViewContext)"/> method is called with <see cref="ViewContext"/>.
134+
/// <typeparamref name="TTagHelper"/> must have a parameterless constructor.
151135
/// </remarks>
152-
public TTagHelper CreateTagHelper<TTagHelper>() where TTagHelper : ITagHelper
136+
public TTagHelper CreateTagHelper<TTagHelper>() where TTagHelper : ITagHelper, new()
153137
{
154-
var tagHelper = TypeActivator.CreateInstance<TTagHelper>(ViewContext.HttpContext.RequestServices);
138+
var tagHelper = new TTagHelper();
155139

156140
TagHelperActivator.Activate(tagHelper, ViewContext);
157141

test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageCreateTagHelperTest.cs

+7-60
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

44
using System;
5+
using System.Globalization;
56
using System.IO;
67
using System.Threading.Tasks;
78
using Microsoft.AspNet.Http;
@@ -31,43 +32,16 @@ public void CreateTagHelper_CreatesProvidedTagHelperType()
3132
}
3233

3334
[Fact]
34-
public void CreateTagHelper_ActivatesProvidedTagHelperType_Constructor()
35+
public void CreateTagHelper_ActivatesProvidedTagHelperType()
3536
{
3637
// Arrange
3738
var instance = CreateTestRazorPage();
3839

3940
// Act
40-
var tagHelper = instance.CreateTagHelper<ConstructorServiceTagHelper>();
41-
42-
// Assert
43-
Assert.NotNull(tagHelper.PassedInService);
44-
}
45-
46-
[Fact]
47-
public void CreateTagHelper_ActivatesProvidedTagHelperType_Property()
48-
{
49-
// Arrange
50-
var instance = CreateTestRazorPage();
51-
52-
// Act
53-
var tagHelper = instance.CreateTagHelper<ActivateAttributeServiceTagHelper>();
54-
55-
// Assert
56-
Assert.NotNull(tagHelper.ActivatedService);
57-
}
58-
59-
[Fact]
60-
public void CreateTagHelper_ActivatesProvidedTagHelperType_PropertyAndConstructor()
61-
{
62-
// Arrange
63-
var instance = CreateTestRazorPage();
64-
65-
// Act
66-
var tagHelper = instance.CreateTagHelper<AttributeConstructorServiceTagHelper>();
41+
var tagHelper = instance.CreateTagHelper<ServiceTagHelper>();
6742

6843
// Assert
6944
Assert.NotNull(tagHelper.ActivatedService);
70-
Assert.NotNull(tagHelper.PassedInService);
7145
}
7246

7347
[Fact]
@@ -94,7 +68,7 @@ public void CreateTagHelper_ProvidesTagHelperTypeWithViewContextAndActivates()
9468

9569
// Assert
9670
Assert.NotNull(tagHelper.ViewContext);
97-
Assert.NotNull(tagHelper.PassedInService);
71+
Assert.NotNull(tagHelper.ActivatedService);
9872
}
9973

10074
private static TestRazorPage CreateTestRazorPage()
@@ -138,35 +112,12 @@ private class NoServiceTagHelper : TagHelper
138112
{
139113
}
140114

141-
private class ConstructorServiceTagHelper : TagHelper
142-
{
143-
public MyService PassedInService { get; set; }
144-
145-
public ConstructorServiceTagHelper(MyService service)
146-
{
147-
PassedInService = service;
148-
}
149-
}
150-
151-
private class ActivateAttributeServiceTagHelper : TagHelper
115+
private class ServiceTagHelper : TagHelper
152116
{
153117
[Activate]
154118
public MyService ActivatedService { get; set; }
155119
}
156120

157-
private class AttributeConstructorServiceTagHelper : TagHelper
158-
{
159-
[Activate]
160-
public MyService ActivatedService { get; set; }
161-
162-
public MyService PassedInService { get; set; }
163-
164-
public AttributeConstructorServiceTagHelper(MyService service)
165-
{
166-
PassedInService = service;
167-
}
168-
}
169-
170121
private class ViewContextTagHelper : TagHelper
171122
{
172123
[Activate]
@@ -175,12 +126,8 @@ private class ViewContextTagHelper : TagHelper
175126

176127
private class ViewContextServiceTagHelper : ViewContextTagHelper
177128
{
178-
public MyService PassedInService { get; set; }
179-
180-
public ViewContextServiceTagHelper(MyService service)
181-
{
182-
PassedInService = service;
183-
}
129+
[Activate]
130+
public MyService ActivatedService { get; set; }
184131
}
185132

186133
private class MyService

0 commit comments

Comments
 (0)