From 02a3ca8abb042102980c85e4dd41835aac562602 Mon Sep 17 00:00:00 2001 From: "N. Taylor Mullen" Date: Thu, 25 Jun 2015 15:40:28 -0700 Subject: [PATCH] React to aspnet/Razor#352. - Moved initialization of TagHelperDescriptorResolver to be Lazy so DesignTimeMode can be set. --- .../MvcRazorHost.cs | 24 ++++++++++++++++++- .../Precompilation/RazorPreCompiler.cs | 2 +- ...TagHelperAttributeValueCodeRendererTest.cs | 3 ++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.AspNet.Mvc.Razor.Host/MvcRazorHost.cs b/src/Microsoft.AspNet.Mvc.Razor.Host/MvcRazorHost.cs index 2278c4e941..2e7e797fd0 100644 --- a/src/Microsoft.AspNet.Mvc.Razor.Host/MvcRazorHost.cs +++ b/src/Microsoft.AspNet.Mvc.Razor.Host/MvcRazorHost.cs @@ -13,6 +13,7 @@ using Microsoft.AspNet.Razor.Chunks; using Microsoft.AspNet.Razor.CodeGenerators; using Microsoft.AspNet.Razor.Parser; using Microsoft.AspNet.Razor.Runtime.TagHelpers; +using Microsoft.AspNet.Razor.TagHelpers; using Microsoft.Framework.Internal; namespace Microsoft.AspNet.Mvc.Razor @@ -44,6 +45,7 @@ namespace Microsoft.AspNet.Mvc.Razor private readonly IChunkTreeCache _chunkTreeCache; private readonly RazorPathNormalizer _pathNormalizer; private ChunkInheritanceUtility _chunkInheritanceUtility; + private ITagHelperDescriptorResolver _tagHelperDescriptorResolver; internal MvcRazorHost(IChunkTreeCache chunkTreeCache, RazorPathNormalizer pathNormalizer) : base(new CSharpRazorCodeLanguage()) @@ -52,7 +54,6 @@ namespace Microsoft.AspNet.Mvc.Razor _baseType = BaseType; _chunkTreeCache = chunkTreeCache; - TagHelperDescriptorResolver = new TagHelperDescriptorResolver(); DefaultBaseClass = BaseType + "<" + DefaultModel + ">"; DefaultNamespace = "Asp"; // Enable instrumentation by default to allow precompiled views to work with BrowserLink. @@ -132,6 +133,27 @@ namespace Microsoft.AspNet.Mvc.Razor { } + /// + public override ITagHelperDescriptorResolver TagHelperDescriptorResolver + { + get + { + // The initialization of the _tagHelperDescriptorResolver needs to be lazy to allow for the setting + // of DesignTimeMode. + if (_tagHelperDescriptorResolver == null) + { + _tagHelperDescriptorResolver = new TagHelperDescriptorResolver(DesignTimeMode); + } + + return _tagHelperDescriptorResolver; + } + [param: NotNull] + set + { + _tagHelperDescriptorResolver = value; + } + } + /// /// Gets the model type used by default when no model is specified. /// diff --git a/src/Microsoft.AspNet.Mvc.Razor/Precompilation/RazorPreCompiler.cs b/src/Microsoft.AspNet.Mvc.Razor/Precompilation/RazorPreCompiler.cs index 9a0f0fc5b0..cb9c5dfef2 100644 --- a/src/Microsoft.AspNet.Mvc.Razor/Precompilation/RazorPreCompiler.cs +++ b/src/Microsoft.AspNet.Mvc.Razor/Precompilation/RazorPreCompiler.cs @@ -191,7 +191,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Precompilation protected IMvcRazorHost GetRazorHost() { - var descriptorResolver = new TagHelperDescriptorResolver(TagHelperTypeResolver); + var descriptorResolver = new TagHelperDescriptorResolver(TagHelperTypeResolver, designTime: false); return new MvcRazorHost(new DefaultChunkTreeCache(FileProvider)) { TagHelperDescriptorResolver = descriptorResolver diff --git a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/MvcTagHelperAttributeValueCodeRendererTest.cs b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/MvcTagHelperAttributeValueCodeRendererTest.cs index 5dbf4ff1c5..0c245e7260 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/MvcTagHelperAttributeValueCodeRendererTest.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/MvcTagHelperAttributeValueCodeRendererTest.cs @@ -29,7 +29,8 @@ namespace Microsoft.AspNet.Mvc.Razor name: "MyAttribute", propertyName: "SomeProperty", typeName: propertyType, - isIndexer: false); + isIndexer: false, + usageDescriptor: null); var writer = new CSharpCodeWriter(); var generatorContext = new ChunkGeneratorContext( host: null,