| File: Language\TagHelperDescriptorBuilder_Pooling.cs | Web Access |
| Project: src\roslyn\src\Razor\src\Compiler\Microsoft.CodeAnalysis.Razor.Compiler\src\Microsoft.CodeAnalysis.Razor.Compiler.csproj (Microsoft.CodeAnalysis.Razor.Compiler) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using Microsoft.AspNetCore.Razor.PooledObjects; namespace Microsoft.AspNetCore.Razor.Language; public partial class TagHelperDescriptorBuilder { private static readonly ObjectPool<TagHelperDescriptorBuilder> s_pool = DefaultPool.Create(static () => new TagHelperDescriptorBuilder()); internal static TagHelperDescriptorBuilder GetInstance(string name, string assemblyName) => GetInstance(TagHelperKind.ITagHelper, name, assemblyName); internal static TagHelperDescriptorBuilder GetInstance(TagHelperKind kind, string name, string assemblyName) { var builder = s_pool.Get(); builder._kind = kind; builder._name = name ?? throw new ArgumentNullException(nameof(name)); builder._assemblyName = assemblyName ?? throw new ArgumentNullException(nameof(assemblyName)); return builder; } private protected override void Reset() { _flags = 0; _kind = 0; _name = null; _assemblyName = null; _typeNameObject = default; _documentationObject = default; _metadataObject = null; RuntimeKind = 0; DisplayName = null; TagOutputHint = null; CaseSensitive = false; AllowedChildTags.Clear(); BoundAttributes.Clear(); TagMatchingRules.Clear(); } /// <summary> /// Retrieves a pooled <see cref="TagHelperDescriptorBuilder"/> instance. /// </summary> /// <remarks> /// The <see cref="PooledBuilder"/> returned by this method should be disposed /// to return the <see cref="TagHelperDescriptorBuilder"/> to its pool. /// The correct way to achieve this is with a using statement: /// /// <code> /// using var _ = TagHelperDescriptorBuilder.GetPooledInstance(..., out var builder); /// </code> /// /// Once disposed, the builder can no longer be used. /// </remarks> public static PooledBuilder GetPooledInstance( TagHelperKind kind, string name, string assemblyName, out TagHelperDescriptorBuilder builder) { var defaultBuilder = GetInstance(kind, name, assemblyName); builder = defaultBuilder; return new(defaultBuilder); } /// <summary> /// Retrieves a pooled <see cref="TagHelperDescriptorBuilder"/> instance. /// </summary> /// <remarks> /// The <see cref="PooledBuilder"/> returned by this method should be disposed /// to return the <see cref="TagHelperDescriptorBuilder"/> to its pool. /// The correct way to achieve this is with a using statement: /// /// <code> /// using var _ = TagHelperDescriptorBuilder.GetPooledInstance(..., out var builder); /// </code> /// /// Once disposed, the builder can no longer be used. /// </remarks> public static PooledBuilder GetPooledInstance( string name, string assemblyName, out TagHelperDescriptorBuilder builder) { var defaultBuilder = GetInstance(name, assemblyName); builder = defaultBuilder; return new(defaultBuilder); } }