diff --git a/src/Microsoft.AspNet.Mvc.Razor/RazorPage.cs b/src/Microsoft.AspNet.Mvc.Razor/RazorPage.cs index cd15dc46af..710cfb611b 100644 --- a/src/Microsoft.AspNet.Mvc.Razor/RazorPage.cs +++ b/src/Microsoft.AspNet.Mvc.Razor/RazorPage.cs @@ -25,7 +25,6 @@ public abstract class RazorPage : IRazorPage private readonly Stack _writerScopes; private TextWriter _originalWriter; private IUrlHelper _urlHelper; - private ITypeActivator _typeActivator; private ITagHelperActivator _tagHelperActivator; private bool _renderedBody; @@ -114,19 +113,6 @@ public dynamic ViewBag /// public abstract Task ExecuteAsync(); - private ITypeActivator TypeActivator - { - get - { - if(_typeActivator == null) - { - _typeActivator = ViewContext.HttpContext.RequestServices.GetService(); - } - - return _typeActivator; - } - } - private ITagHelperActivator TagHelperActivator { get @@ -139,19 +125,17 @@ private ITagHelperActivator TagHelperActivator return _tagHelperActivator; } } - /// /// Creates and activates a . /// /// A type. /// The activated . /// - /// If the implements the - /// method is called with . + /// must have a parameterless constructor. /// - public TTagHelper CreateTagHelper() where TTagHelper : ITagHelper + public TTagHelper CreateTagHelper() where TTagHelper : ITagHelper, new() { - var tagHelper = TypeActivator.CreateInstance(ViewContext.HttpContext.RequestServices); + var tagHelper = new TTagHelper(); TagHelperActivator.Activate(tagHelper, ViewContext); diff --git a/test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageCreateTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageCreateTagHelperTest.cs index d99b619f8b..6c4f84836a 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageCreateTagHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageCreateTagHelperTest.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Globalization; using System.IO; using System.Threading.Tasks; using Microsoft.AspNet.Http; @@ -18,56 +19,48 @@ namespace Microsoft.AspNet.Mvc.Razor public class RazorPageCreateTagHelperTest { [Fact] - public void CreateTagHelper_CreatesProvidedTagHelperType() - { - // Arrange - var instance = CreateTestRazorPage(); - - // Act - var tagHelper = instance.CreateTagHelper(); - - // Assert - Assert.NotNull(tagHelper); - } - - [Fact] - public void CreateTagHelper_ActivatesProvidedTagHelperType_Constructor() + public void CreateTagHelper_ThrowsIfNoParameterlessConstructor() { // Arrange var instance = CreateTestRazorPage(); + var expectedErrorMessage = string.Format( + CultureInfo.InvariantCulture, + "Tag helper `{0}` must have a public paramterless constructor.", + typeof(NoParameterlessConstructor).FullName); - // Act - var tagHelper = instance.CreateTagHelper(); + // Act & Assert + var ex = Assert.Throws(() => + { + instance.CreateTagHelper(); + }); - // Assert - Assert.NotNull(tagHelper.PassedInService); + Assert.Equal(expectedErrorMessage, ex.Message); } [Fact] - public void CreateTagHelper_ActivatesProvidedTagHelperType_Property() + public void CreateTagHelper_CreatesProvidedTagHelperType() { // Arrange var instance = CreateTestRazorPage(); // Act - var tagHelper = instance.CreateTagHelper(); + var tagHelper = instance.CreateTagHelper(); // Assert - Assert.NotNull(tagHelper.ActivatedService); + Assert.NotNull(tagHelper); } [Fact] - public void CreateTagHelper_ActivatesProvidedTagHelperType_PropertyAndConstructor() + public void CreateTagHelper_ActivatesProvidedTagHelperType() { // Arrange var instance = CreateTestRazorPage(); // Act - var tagHelper = instance.CreateTagHelper(); + var tagHelper = instance.CreateTagHelper(); // Assert Assert.NotNull(tagHelper.ActivatedService); - Assert.NotNull(tagHelper.PassedInService); } [Fact] @@ -94,7 +87,7 @@ public void CreateTagHelper_ProvidesTagHelperTypeWithViewContextAndActivates() // Assert Assert.NotNull(tagHelper.ViewContext); - Assert.NotNull(tagHelper.PassedInService); + Assert.NotNull(tagHelper.ActivatedService); } private static TestRazorPage CreateTestRazorPage() @@ -138,33 +131,10 @@ private class NoServiceTagHelper : TagHelper { } - private class ConstructorServiceTagHelper : TagHelper - { - public MyService PassedInService { get; set; } - - public ConstructorServiceTagHelper(MyService service) - { - PassedInService = service; - } - } - - private class ActivateAttributeServiceTagHelper : TagHelper - { - [Activate] - public MyService ActivatedService { get; set; } - } - - private class AttributeConstructorServiceTagHelper : TagHelper + private class ServiceTagHelper : TagHelper { [Activate] public MyService ActivatedService { get; set; } - - public MyService PassedInService { get; set; } - - public AttributeConstructorServiceTagHelper(MyService service) - { - PassedInService = service; - } } private class ViewContextTagHelper : TagHelper @@ -175,11 +145,14 @@ private class ViewContextTagHelper : TagHelper private class ViewContextServiceTagHelper : ViewContextTagHelper { - public MyService PassedInService { get; set; } + [Activate] + public MyService ActivatedService { get; set; } + } - public ViewContextServiceTagHelper(MyService service) + private class NoParameterlessConstructor : TagHelper + { + public NoParameterlessConstructor(string a) { - PassedInService = service; } }