예제 #1
0
        public void TagHelperDescriptorCache_TypeNameAffectsHash()
        {
            // Arrange
            var expectedPropertyName = "PropertyName";

            var intTagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");

            _ = intTagHelperBuilder.TypeName("TestTagHelper");
            intTagHelperBuilder.BoundAttributeDescriptor(intBuilder =>
                                                         intBuilder
                                                         .Name("test")
                                                         .PropertyName(expectedPropertyName)
                                                         .TypeName(typeof(int).FullName)
                                                         );
            var intTagHelper = intTagHelperBuilder.Build();

            var stringTagHelperBuilder = new DefaultTagHelperDescriptorBuilder(TagHelperConventions.DefaultKind, "TestTagHelper", "Test");

            _ = stringTagHelperBuilder.TypeName("TestTagHelper");
            stringTagHelperBuilder.BoundAttributeDescriptor(stringBuilder =>
                                                            stringBuilder
                                                            .Name("test")
                                                            .PropertyName(expectedPropertyName)
                                                            .TypeName(typeof(string).FullName)
                                                            );
            var stringTagHelper = stringTagHelperBuilder.Build();

            // Act
            TagHelperDescriptorCache.Set(intTagHelper.GetHashCode(), intTagHelper);

            // Assert
            Assert.False(TagHelperDescriptorCache.TryGetDescriptor(stringTagHelper.GetHashCode(), out var descriptor));
        }
예제 #2
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType != JsonToken.StartObject)
            {
                return(null);
            }

            // Try reading the optional hashcode
            // Note; the JsonReader will read a numeric value as a Int64 (long) by default
            var hashWasRead = reader.TryReadNextProperty <long>(RazorSerializationConstants.HashCodePropertyName, out var hashLong);
            var hash        = hashWasRead ? Convert.ToInt32(hashLong) : 0;

            if (!DisableCachingForTesting &&
                hashWasRead &&
                TagHelperDescriptorCache.TryGetDescriptor(hash, out var descriptor))
            {
                ReadToEndOfCurrentObject(reader);
                return(descriptor);
            }

            // Required tokens (order matters)
            if (!reader.TryReadNextProperty <string>(nameof(TagHelperDescriptor.Kind), out var descriptorKind))
            {
                return(default);