React to TagHelper descriptors api cleanup
This commit is contained in:
parent
1197657e5b
commit
1fdc5132cb
|
|
@ -10,6 +10,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host
|
||||||
{
|
{
|
||||||
public class ModelExpressionPass : RazorIRPassBase, IRazorIROptimizationPass
|
public class ModelExpressionPass : RazorIRPassBase, IRazorIROptimizationPass
|
||||||
{
|
{
|
||||||
|
private const string ModelExpressionTypeName = "Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression";
|
||||||
|
|
||||||
public override void ExecuteCore(RazorCodeDocument codeDocument, DocumentIRNode irDocument)
|
public override void ExecuteCore(RazorCodeDocument codeDocument, DocumentIRNode irDocument)
|
||||||
{
|
{
|
||||||
var visitor = new Visitor();
|
var visitor = new Visitor();
|
||||||
|
|
@ -22,7 +24,9 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host
|
||||||
|
|
||||||
public override void VisitSetTagHelperProperty(SetTagHelperPropertyIRNode node)
|
public override void VisitSetTagHelperProperty(SetTagHelperPropertyIRNode node)
|
||||||
{
|
{
|
||||||
if (string.Equals(node.Descriptor.TypeName, "Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression", StringComparison.Ordinal))
|
if (string.Equals(node.Descriptor.TypeName, ModelExpressionTypeName, StringComparison.Ordinal) ||
|
||||||
|
(node.IsIndexerNameMatch &&
|
||||||
|
string.Equals(node.Descriptor.IndexerTypeName, ModelExpressionTypeName, StringComparison.Ordinal)))
|
||||||
{
|
{
|
||||||
var expression = new CSharpExpressionIRNode();
|
var expression = new CSharpExpressionIRNode();
|
||||||
var builder = RazorIRBuilder.Create(expression);
|
var builder = RazorIRBuilder.Create(expression);
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host
|
||||||
public static class ViewComponentTagHelperDescriptorConventions
|
public static class ViewComponentTagHelperDescriptorConventions
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The key in a <see cref="TagHelperDescriptor.PropertyBag"/> containing
|
/// The key in a <see cref="TagHelperDescriptor.Metadata"/> containing
|
||||||
/// the short name of a view component.
|
/// the short name of a view component.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly string ViewComponentNameKey = "ViewComponentName";
|
public static readonly string ViewComponentNameKey = "ViewComponentName";
|
||||||
|
|
@ -22,6 +22,6 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host
|
||||||
/// <param name="descriptor">The <see cref="TagHelperDescriptor"/> to check.</param>
|
/// <param name="descriptor">The <see cref="TagHelperDescriptor"/> to check.</param>
|
||||||
/// <returns>Whether a <see cref="TagHelperDescriptor"/> represents a view component.</returns>
|
/// <returns>Whether a <see cref="TagHelperDescriptor"/> represents a view component.</returns>
|
||||||
public static bool IsViewComponentDescriptor(TagHelperDescriptor descriptor) =>
|
public static bool IsViewComponentDescriptor(TagHelperDescriptor descriptor) =>
|
||||||
descriptor != null && descriptor.PropertyBag.ContainsKey(ViewComponentNameKey);
|
descriptor != null && descriptor.Metadata.ContainsKey(ViewComponentNameKey);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
// 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.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Razor.Evolution;
|
using Microsoft.AspNetCore.Razor.Evolution;
|
||||||
|
|
@ -28,7 +28,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host
|
||||||
{
|
{
|
||||||
GenerateVCTHClass(visitor.Class, tagHelper.Value);
|
GenerateVCTHClass(visitor.Class, tagHelper.Value);
|
||||||
|
|
||||||
if (visitor.Fields.UsedTagHelperTypeNames.Remove(tagHelper.Value.TypeName))
|
var tagHelperTypeName = tagHelper.Value.Metadata[ITagHelperDescriptorBuilder.TypeNameKey];
|
||||||
|
if (visitor.Fields.UsedTagHelperTypeNames.Remove(tagHelperTypeName))
|
||||||
{
|
{
|
||||||
visitor.Fields.UsedTagHelperTypeNames.Add(GetVCTHFullName(visitor.Namespace, visitor.Class, tagHelper.Value));
|
visitor.Fields.UsedTagHelperTypeNames.Add(GetVCTHFullName(visitor.Namespace, visitor.Class, tagHelper.Value));
|
||||||
}
|
}
|
||||||
|
|
@ -77,14 +78,14 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host
|
||||||
ClassDeclarationIRNode @class,
|
ClassDeclarationIRNode @class,
|
||||||
TagHelperDescriptor tagHelper)
|
TagHelperDescriptor tagHelper)
|
||||||
{
|
{
|
||||||
var vcName = tagHelper.PropertyBag[ViewComponentTagHelperDescriptorConventions.ViewComponentNameKey];
|
var vcName = tagHelper.Metadata[ViewComponentTagHelperDescriptorConventions.ViewComponentNameKey];
|
||||||
return $"{@namespace.Content}.{@class.Name}.__Generated__{vcName}ViewComponentTagHelper";
|
return $"{@namespace.Content}.{@class.Name}.__Generated__{vcName}ViewComponentTagHelper";
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string GetVCTHClassName(
|
private static string GetVCTHClassName(
|
||||||
TagHelperDescriptor tagHelper)
|
TagHelperDescriptor tagHelper)
|
||||||
{
|
{
|
||||||
var vcName = tagHelper.PropertyBag[ViewComponentTagHelperDescriptorConventions.ViewComponentNameKey];
|
var vcName = tagHelper.Metadata[ViewComponentTagHelperDescriptorConventions.ViewComponentNameKey];
|
||||||
return $"__Generated__{vcName}ViewComponentTagHelper";
|
return $"__Generated__{vcName}ViewComponentTagHelper";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -143,18 +144,12 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host
|
||||||
$"global::Microsoft.AspNetCore.Mvc.Rendering.ViewContext",
|
$"global::Microsoft.AspNetCore.Mvc.Rendering.ViewContext",
|
||||||
"ViewContext");
|
"ViewContext");
|
||||||
|
|
||||||
var indexerAttributes = descriptor.Attributes.Where(a => a.IsIndexer);
|
foreach (var attribute in descriptor.BoundAttributes)
|
||||||
|
|
||||||
foreach (var attribute in descriptor.Attributes)
|
|
||||||
{
|
{
|
||||||
if (attribute.IsIndexer)
|
writer.WriteAutoPropertyDeclaration(
|
||||||
{
|
"public", attribute.TypeName, attribute.Metadata[ITagHelperBoundAttributeDescriptorBuilder.PropertyNameKey]);
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.WriteAutoPropertyDeclaration("public", attribute.TypeName, attribute.PropertyName);
|
if (attribute.IndexerTypeName != null)
|
||||||
|
|
||||||
if (indexerAttributes.Any(a => string.Equals(a.PropertyName, attribute.PropertyName, StringComparison.Ordinal)))
|
|
||||||
{
|
{
|
||||||
writer.Write(" = ")
|
writer.Write(" = ")
|
||||||
.WriteStartNewObject(attribute.TypeName)
|
.WriteStartNewObject(attribute.TypeName)
|
||||||
|
|
@ -199,11 +194,12 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host
|
||||||
|
|
||||||
private string[] GetMethodParameters(TagHelperDescriptor descriptor)
|
private string[] GetMethodParameters(TagHelperDescriptor descriptor)
|
||||||
{
|
{
|
||||||
var propertyNames = descriptor.Attributes.Where(a => !a.IsIndexer).Select(attribute => attribute.PropertyName);
|
var propertyNames = descriptor.BoundAttributes.Select(
|
||||||
|
attribute => attribute.Metadata[ITagHelperBoundAttributeDescriptorBuilder.PropertyNameKey]);
|
||||||
var joinedPropertyNames = string.Join(", ", propertyNames);
|
var joinedPropertyNames = string.Join(", ", propertyNames);
|
||||||
var parametersString = $"new {{ { joinedPropertyNames } }}";
|
var parametersString = $"new {{ { joinedPropertyNames } }}";
|
||||||
|
|
||||||
var viewComponentName = descriptor.PropertyBag[
|
var viewComponentName = descriptor.Metadata[
|
||||||
ViewComponentTagHelperDescriptorConventions.ViewComponentNameKey];
|
ViewComponentTagHelperDescriptorConventions.ViewComponentNameKey];
|
||||||
var methodParameters = new[] { $"\"{viewComponentName}\"", parametersString };
|
var methodParameters = new[] { $"\"{viewComponentName}\"", parametersString };
|
||||||
return methodParameters;
|
return methodParameters;
|
||||||
|
|
@ -211,9 +207,13 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host
|
||||||
|
|
||||||
private void BuildTargetElementString(CSharpCodeWriter writer, TagHelperDescriptor descriptor)
|
private void BuildTargetElementString(CSharpCodeWriter writer, TagHelperDescriptor descriptor)
|
||||||
{
|
{
|
||||||
|
Debug.Assert(descriptor.TagMatchingRules.Count() == 1);
|
||||||
|
|
||||||
|
var rule = descriptor.TagMatchingRules.First();
|
||||||
|
|
||||||
writer.Write("[")
|
writer.Write("[")
|
||||||
.WriteStartMethodInvocation("Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElementAttribute")
|
.WriteStartMethodInvocation("Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElementAttribute")
|
||||||
.WriteStringLiteral(descriptor.FullTagName)
|
.WriteStringLiteral(rule.TagName)
|
||||||
.WriteLine(")]");
|
.WriteLine(")]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -235,7 +235,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host
|
||||||
if (ViewComponentTagHelperDescriptorConventions.IsViewComponentDescriptor(tagHelper))
|
if (ViewComponentTagHelperDescriptorConventions.IsViewComponentDescriptor(tagHelper))
|
||||||
{
|
{
|
||||||
// Capture all the VCTagHelpers (unique by type name) so we can generate a class for each one.
|
// Capture all the VCTagHelpers (unique by type name) so we can generate a class for each one.
|
||||||
var vcName = tagHelper.PropertyBag[ViewComponentTagHelperDescriptorConventions.ViewComponentNameKey];
|
var vcName = tagHelper.Metadata[ViewComponentTagHelperDescriptorConventions.ViewComponentNameKey];
|
||||||
TagHelpers[vcName] = tagHelper;
|
TagHelpers[vcName] = tagHelper;
|
||||||
|
|
||||||
CreateTagHelpers.Add(node);
|
CreateTagHelpers.Add(node);
|
||||||
|
|
|
||||||
|
|
@ -25,21 +25,14 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host
|
||||||
|
|
||||||
var tagHelpers = new[]
|
var tagHelpers = new[]
|
||||||
{
|
{
|
||||||
new TagHelperDescriptor()
|
ITagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly")
|
||||||
{
|
.BindAttribute(attribute =>
|
||||||
AssemblyName = "TestAssembly",
|
attribute
|
||||||
TypeName = "TestTagHelper",
|
.Name("Foo")
|
||||||
TagName = "p",
|
.TypeName("System.Int32"))
|
||||||
Attributes = new TagHelperAttributeDescriptor[]
|
.TagMatchingRule(rule =>
|
||||||
{
|
rule.RequireTagName("p"))
|
||||||
new TagHelperAttributeDescriptor()
|
.Build()
|
||||||
{
|
|
||||||
TypeName = "System.Int32",
|
|
||||||
Name = "Foo",
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var engine = CreateEngine(tagHelpers);
|
var engine = CreateEngine(tagHelpers);
|
||||||
|
|
@ -72,21 +65,14 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host
|
||||||
|
|
||||||
var tagHelpers = new[]
|
var tagHelpers = new[]
|
||||||
{
|
{
|
||||||
new TagHelperDescriptor()
|
ITagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly")
|
||||||
{
|
.BindAttribute(attribute =>
|
||||||
AssemblyName = "TestAssembly",
|
attribute
|
||||||
TypeName = "TestTagHelper",
|
.Name("Foo")
|
||||||
TagName = "p",
|
.TypeName(typeof(ModelExpression).FullName))
|
||||||
Attributes = new TagHelperAttributeDescriptor[]
|
.TagMatchingRule(rule =>
|
||||||
{
|
rule.RequireTagName("p"))
|
||||||
new TagHelperAttributeDescriptor()
|
.Build()
|
||||||
{
|
|
||||||
TypeName = typeof(ModelExpression).FullName,
|
|
||||||
Name = "Foo",
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var engine = CreateEngine(tagHelpers);
|
var engine = CreateEngine(tagHelpers);
|
||||||
|
|
@ -124,21 +110,14 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host
|
||||||
|
|
||||||
var tagHelpers = new[]
|
var tagHelpers = new[]
|
||||||
{
|
{
|
||||||
new TagHelperDescriptor()
|
ITagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly")
|
||||||
{
|
.BindAttribute(attribute =>
|
||||||
AssemblyName = "TestAssembly",
|
attribute
|
||||||
TypeName = "TestTagHelper",
|
.Name("Foo")
|
||||||
TagName = "p",
|
.TypeName(typeof(ModelExpression).FullName))
|
||||||
Attributes = new TagHelperAttributeDescriptor[]
|
.TagMatchingRule(rule =>
|
||||||
{
|
rule.RequireTagName("p"))
|
||||||
new TagHelperAttributeDescriptor()
|
.Build()
|
||||||
{
|
|
||||||
TypeName = typeof(ModelExpression).FullName,
|
|
||||||
Name = "Foo",
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var engine = CreateEngine(tagHelpers);
|
var engine = CreateEngine(tagHelpers);
|
||||||
|
|
|
||||||
|
|
@ -38,22 +38,22 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host.Test
|
||||||
|
|
||||||
private static TagHelperDescriptor CreateTagHelperDescriptor()
|
private static TagHelperDescriptor CreateTagHelperDescriptor()
|
||||||
{
|
{
|
||||||
var descriptor = new TagHelperDescriptor
|
var descriptor = ITagHelperDescriptorBuilder.Create("TypeName", "AssemblyName")
|
||||||
{
|
.TagMatchingRule(rule =>
|
||||||
TagName = "tag-name",
|
rule.RequireTagName("tag-name"))
|
||||||
TypeName = "TypeName",
|
.Build();
|
||||||
AssemblyName = "AssemblyName",
|
|
||||||
};
|
|
||||||
|
|
||||||
return descriptor;
|
return descriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static TagHelperDescriptor CreateViewComponentTagHelperDescriptor()
|
private static TagHelperDescriptor CreateViewComponentTagHelperDescriptor()
|
||||||
{
|
{
|
||||||
var descriptor = CreateTagHelperDescriptor();
|
var descriptor = ITagHelperDescriptorBuilder.Create("TypeName", "AssemblyName")
|
||||||
descriptor.PropertyBag.Add(
|
.TagMatchingRule(rule =>
|
||||||
ViewComponentTagHelperDescriptorConventions.ViewComponentNameKey,
|
rule.RequireTagName("tag-name"))
|
||||||
"ViewComponentName");
|
.AddMetadata(ViewComponentTagHelperDescriptorConventions.ViewComponentNameKey, "ViewComponentName")
|
||||||
|
.Build();
|
||||||
|
|
||||||
return descriptor;
|
return descriptor;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,20 +23,14 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host
|
||||||
|
|
||||||
var tagHelpers = new[]
|
var tagHelpers = new[]
|
||||||
{
|
{
|
||||||
new TagHelperDescriptor()
|
ITagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly")
|
||||||
{
|
.BindAttribute(attribute =>
|
||||||
AssemblyName = "TestAssembly",
|
attribute
|
||||||
TypeName = "TestTagHelper",
|
.Name("Foo")
|
||||||
TagName = "p",
|
.TypeName("System.Int32"))
|
||||||
Attributes = new TagHelperAttributeDescriptor[]
|
.TagMatchingRule(rule =>
|
||||||
{
|
rule.RequireTagName("p"))
|
||||||
new TagHelperAttributeDescriptor()
|
.Build()
|
||||||
{
|
|
||||||
TypeName = "System.Int32",
|
|
||||||
Name = "Foo",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var engine = CreateEngine(tagHelpers);
|
var engine = CreateEngine(tagHelpers);
|
||||||
|
|
@ -69,25 +63,18 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host
|
||||||
|
|
||||||
var tagHelpers = new[]
|
var tagHelpers = new[]
|
||||||
{
|
{
|
||||||
new TagHelperDescriptor()
|
ITagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly")
|
||||||
{
|
.BindAttribute(attribute =>
|
||||||
AssemblyName = "TestAssembly",
|
attribute
|
||||||
TypeName = "TestTagHelper",
|
.Name("Foo")
|
||||||
TagName = "tagcloud",
|
.TypeName("System.Int32")
|
||||||
Attributes = new TagHelperAttributeDescriptor[]
|
.PropertyName("Foo"))
|
||||||
{
|
.TagMatchingRule(rule =>
|
||||||
new TagHelperAttributeDescriptor()
|
rule.RequireTagName("tagcloud"))
|
||||||
{
|
.AddMetadata(ViewComponentTagHelperDescriptorConventions.ViewComponentNameKey, "TagCloud")
|
||||||
TypeName = "System.Int32",
|
.Build()
|
||||||
Name = "Foo",
|
|
||||||
PropertyName = "Foo",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
tagHelpers[0].PropertyBag.Add(ViewComponentTagHelperDescriptorConventions.ViewComponentNameKey, "TagCloud");
|
|
||||||
|
|
||||||
var engine = CreateEngine(tagHelpers);
|
var engine = CreateEngine(tagHelpers);
|
||||||
var pass = new ViewComponentTagHelperPass()
|
var pass = new ViewComponentTagHelperPass()
|
||||||
{
|
{
|
||||||
|
|
@ -146,33 +133,19 @@ public class __Generated__TagCloudViewComponentTagHelper : Microsoft.AspNetCore.
|
||||||
|
|
||||||
var tagHelpers = new[]
|
var tagHelpers = new[]
|
||||||
{
|
{
|
||||||
new TagHelperDescriptor()
|
ITagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly")
|
||||||
{
|
.BindAttribute(attribute =>
|
||||||
AssemblyName = "TestAssembly",
|
attribute
|
||||||
TypeName = "TestTagHelper",
|
.Name("Foo")
|
||||||
TagName = "tagcloud",
|
.TypeName("System.Collections.Generic.Dictionary<System.String, System.Int32>")
|
||||||
Attributes = new TagHelperAttributeDescriptor[]
|
.PropertyName("Tags")
|
||||||
{
|
.AsDictionary("foo-", "System.Int32"))
|
||||||
new TagHelperAttributeDescriptor()
|
.TagMatchingRule(rule =>
|
||||||
{
|
rule.RequireTagName("tagcloud"))
|
||||||
TypeName = "System.Collections.Generic.Dictionary<System.String, System.Int32>",
|
.AddMetadata(ViewComponentTagHelperDescriptorConventions.ViewComponentNameKey, "TagCloud")
|
||||||
Name = "foo",
|
.Build()
|
||||||
PropertyName = "Tags",
|
|
||||||
IsIndexer = false,
|
|
||||||
},
|
|
||||||
new TagHelperAttributeDescriptor()
|
|
||||||
{
|
|
||||||
TypeName = "System.Collections.Generic.Dictionary<System.String, System.Int32>",
|
|
||||||
Name = "foo-",
|
|
||||||
PropertyName = "Tags",
|
|
||||||
IsIndexer = true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
tagHelpers[0].PropertyBag.Add(ViewComponentTagHelperDescriptorConventions.ViewComponentNameKey, "TagCloud");
|
|
||||||
|
|
||||||
var engine = CreateEngine(tagHelpers);
|
var engine = CreateEngine(tagHelpers);
|
||||||
var pass = new ViewComponentTagHelperPass()
|
var pass = new ViewComponentTagHelperPass()
|
||||||
{
|
{
|
||||||
|
|
@ -231,39 +204,26 @@ public class __Generated__TagCloudViewComponentTagHelper : Microsoft.AspNetCore.
|
||||||
|
|
||||||
var tagHelpers = new[]
|
var tagHelpers = new[]
|
||||||
{
|
{
|
||||||
new TagHelperDescriptor()
|
ITagHelperDescriptorBuilder.Create("PTestTagHelper", "TestAssembly")
|
||||||
{
|
.BindAttribute(attribute =>
|
||||||
AssemblyName = "TestAssembly",
|
attribute
|
||||||
TypeName = "PTestTagHelper",
|
.Name("Foo")
|
||||||
TagName = "p",
|
.TypeName("System.Int32"))
|
||||||
Attributes = new TagHelperAttributeDescriptor[]
|
.TagMatchingRule(rule =>
|
||||||
{
|
rule.RequireTagName("p"))
|
||||||
new TagHelperAttributeDescriptor()
|
.Build(),
|
||||||
{
|
ITagHelperDescriptorBuilder.Create("TestTagHelper", "TestAssembly")
|
||||||
TypeName = "System.Int32",
|
.BindAttribute(attribute =>
|
||||||
Name = "Foo",
|
attribute
|
||||||
}
|
.Name("Foo")
|
||||||
}
|
.TypeName("System.Int32")
|
||||||
},
|
.PropertyName("Foo"))
|
||||||
new TagHelperDescriptor()
|
.TagMatchingRule(rule =>
|
||||||
{
|
rule.RequireTagName("tagcloud"))
|
||||||
AssemblyName = "TestAssembly",
|
.AddMetadata(ViewComponentTagHelperDescriptorConventions.ViewComponentNameKey, "TagCloud")
|
||||||
TypeName = "TestTagHelper",
|
.Build()
|
||||||
TagName = "tagcloud",
|
|
||||||
Attributes = new TagHelperAttributeDescriptor[]
|
|
||||||
{
|
|
||||||
new TagHelperAttributeDescriptor()
|
|
||||||
{
|
|
||||||
TypeName = "System.Int32",
|
|
||||||
Name = "Foo",
|
|
||||||
PropertyName = "Foo",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
tagHelpers[1].PropertyBag.Add(ViewComponentTagHelperDescriptorConventions.ViewComponentNameKey, "TagCloud");
|
|
||||||
|
|
||||||
var engine = CreateEngine(tagHelpers);
|
var engine = CreateEngine(tagHelpers);
|
||||||
var pass = new ViewComponentTagHelperPass()
|
var pass = new ViewComponentTagHelperPass()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue