Пример #1
0
        public void WriteViewComponentTagHelper(CodeRenderingContext context, ViewComponentTagHelperIntermediateNode node)
        {
            // Add target element.
            WriteTargetElementString(context.CodeWriter, node.TagHelper);

            // Initialize declaration.
            using (context.CodeWriter.BuildClassDeclaration(
                       PublicModifiers,
                       node.ClassName,
                       TagHelperTypeName,
                       interfaces: null,
                       typeParameters: null))
            {
                // Add view component helper.
                context.CodeWriter.WriteVariableDeclaration(
                    $"private readonly {ViewComponentHelperTypeName}",
                    ViewComponentHelperVariableName,
                    value: null);

                // Add constructor.
                WriteConstructorString(context.CodeWriter, node.ClassName);

                // Add attributes.
                WriteAttributeDeclarations(context.CodeWriter, node.TagHelper);

                // Add process method.
                WriteProcessMethodString(context.CodeWriter, node.TagHelper);
            }
        }
Пример #2
0
        private void AddTagHelperClass(Context context, TagHelperDescriptor tagHelper)
        {
            var node = new ViewComponentTagHelperIntermediateNode()
            {
                ClassName = context.GetClassName(tagHelper),
                TagHelper = tagHelper
            };

            context.Class.Children.Add(node);
        }
Пример #3
0
        public void WriteViewComponentTagHelper_GeneratesViewComponentTagHelper_WithIndexer()
        {
            // Arrange
            var tagHelper = TagHelperDescriptorBuilder
                            .Create(ViewComponentTagHelperConventions.Kind, "TestTagHelper", "TestAssembly")
                            .TypeName("__Generated__TagCloudViewComponentTagHelper")
                            .BoundAttributeDescriptor(attribute => attribute
                                                      .Name("Foo")
                                                      .TypeName("System.Collections.Generic.Dictionary<System.String, System.Int32>")
                                                      .PropertyName("Tags")
                                                      .AsDictionaryAttribute("foo-", "System.Int32"))
                            .TagMatchingRuleDescriptor(rule => rule.RequireTagName("tagcloud"))
                            .AddMetadata(ViewComponentTagHelperMetadata.Name, "TagCloud")
                            .Build();

            var extension = new ViewComponentTagHelperTargetExtension();
            var context   = TestCodeRenderingContext.CreateRuntime();
            var node      = new ViewComponentTagHelperIntermediateNode()
            {
                ClassName = "__Generated__TagCloudViewComponentTagHelper",
                TagHelper = tagHelper
            };

            // Act
            extension.WriteViewComponentTagHelper(context, node);

            // Assert
            var csharp = context.CodeWriter.GenerateCode();

            Assert.Equal(
                @"[Microsoft.AspNetCore.Razor.TagHelpers.HtmlTargetElementAttribute(""tagcloud"")]
public class __Generated__TagCloudViewComponentTagHelper : Microsoft.AspNetCore.Razor.TagHelpers.TagHelper
{
    private readonly global::Microsoft.AspNetCore.Mvc.IViewComponentHelper _helper = null;
    public __Generated__TagCloudViewComponentTagHelper(global::Microsoft.AspNetCore.Mvc.IViewComponentHelper helper)
    {
        _helper = helper;
    }
    [Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeNotBoundAttribute, global::Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContextAttribute]
    public global::Microsoft.AspNetCore.Mvc.Rendering.ViewContext ViewContext { get; set; }
    public System.Collections.Generic.Dictionary<System.String, System.Int32> Tags { get; set; }
     = new System.Collections.Generic.Dictionary<System.String, System.Int32>();
    public override async global::System.Threading.Tasks.Task ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
    {
        (_helper as global::Microsoft.AspNetCore.Mvc.ViewFeatures.IViewContextAware)?.Contextualize(ViewContext);
        var content = await _helper.InvokeAsync(""TagCloud"", new { Tags });
        output.TagName = null;
        output.Content.SetHtmlContent(content);
    }
}
",
                csharp,
                ignoreLineEndingDifferences: true);
        }