public ShapeTagHelperDescriptorResolver(
     TagHelperTypeResolver typeResolver,
     TagHelperDescriptorFactory descriptorFactory,
     IHttpContextAccessor httpContextAccessor
     )
     : base(typeResolver, descriptorFactory)
 {
     _httpContextAccessor = httpContextAccessor;
 }
 public ShapeTagHelperDescriptorResolver(
     TagHelperTypeResolver typeResolver,
     TagHelperDescriptorFactory descriptorFactory,
     IHttpContextAccessor httpContextAccessor
     )
     : base(typeResolver, descriptorFactory)
 {
     _httpContextAccessor = httpContextAccessor;
 }
Esempio n. 3
0
        public void CreateDescriptors_WithPrefixes_ReturnsExpectedAttributeDescriptors(
            Type tagHelperType,
            IEnumerable <TagHelperAttributeDescriptor> expectedAttributeDescriptors,
            string[] expectedErrorMessages)
        {
            // Arrange
            var errorSink = new ErrorSink();

            // Act
            var descriptors = TagHelperDescriptorFactory.CreateDescriptors(
                AssemblyName,
                GetTypeInfo(tagHelperType),
                designTime: false,
                errorSink: errorSink);

            // Assert
            var errors = errorSink.Errors.ToArray();

            Assert.Equal(expectedErrorMessages.Length, errors.Length);

            for (var i = 0; i < errors.Length; i++)
            {
                Assert.Equal(0, errors[i].Length);
                Assert.Equal(SourceLocation.Zero, errors[i].Location);
                Assert.Equal(expectedErrorMessages[i], errors[i].Message, StringComparer.Ordinal);
            }

            var descriptor = Assert.Single(descriptors);

#if DNXCORE50
            // In CoreCLR type forwarding of System.Runtime types causes issues with comparing FullNames for generic types.
            // We'll work around this by sanitizing the type names so that the assembly qualification is removed.
            foreach (var attributeDescriptor in expectedAttributeDescriptors)
            {
                attributeDescriptor.TypeName = RuntimeTypeInfo.SanitizeFullName(attributeDescriptor.TypeName);
            }

            foreach (var attributeDescriptor in descriptor.Attributes)
            {
                attributeDescriptor.TypeName = RuntimeTypeInfo.SanitizeFullName(attributeDescriptor.TypeName);
            }
#endif

            Assert.Equal(
                expectedAttributeDescriptors,
                descriptor.Attributes,
                TagHelperAttributeDescriptorComparer.Default);
        }
        private void SetAttributeDescriptors(ViewComponentDescriptor viewComponentDescriptor,
                                             TagHelperDescriptor tagHelperDescriptor)
        {
            var methodParameters             = viewComponentDescriptor.MethodInfo.GetParameters();
            var attributeDescriptors         = new List <TagHelperAttributeDescriptor>();
            var indexerDescriptors           = new List <TagHelperAttributeDescriptor>();
            var requiredAttributeDescriptors = new List <TagHelperRequiredAttributeDescriptor>();

            foreach (var parameter in methodParameters)
            {
                var lowerKebabName = TagHelperDescriptorFactory.ToHtmlCase(parameter.Name);
                var typeName       = GetCSharpTypeName(parameter.ParameterType);
                var descriptor     = new TagHelperAttributeDescriptor
                {
                    Name         = lowerKebabName,
                    PropertyName = parameter.Name,
                    TypeName     = typeName
                };

                descriptor.IsEnum    = parameter.ParameterType.GetTypeInfo().IsEnum;
                descriptor.IsIndexer = false;

                attributeDescriptors.Add(descriptor);

                var indexerDescriptor = GetIndexerAttributeDescriptor(parameter, lowerKebabName);
                if (indexerDescriptor != null)
                {
                    indexerDescriptors.Add(indexerDescriptor);
                }
                else
                {
                    // Set required attributes only for non-indexer attributes. Indexer attributes can't be required attributes
                    // because there are two ways of setting values for the attribute.
                    requiredAttributeDescriptors.Add(new TagHelperRequiredAttributeDescriptor
                    {
                        Name = lowerKebabName
                    });
                }
            }

            attributeDescriptors.AddRange(indexerDescriptors);
            tagHelperDescriptor.Attributes         = attributeDescriptors;
            tagHelperDescriptor.RequiredAttributes = requiredAttributeDescriptors;
        }
 private string GetTagName(ViewComponentDescriptor descriptor)
 {
     return($"vc:{TagHelperDescriptorFactory.ToHtmlCase(descriptor.ShortName)}");
 }
Esempio n. 6
0
        public bool ProcessMessage(JObject data, IAssemblyLoadContext assemblyLoadContext)
        {
            var message = data.ToObject <RazorPluginRequestMessage>();

            if (message.MessageType == null)
            {
                throw new InvalidOperationException(
                          Resources.FormatValueMustBeProvidedInMessage(
                              nameof(message.MessageType),
                              nameof(RazorPluginRequestMessage)));
            }

            switch (message.MessageType)
            {
            case RazorPluginMessageTypes.ResolveTagHelperDescriptors:
                if (message.Data == null)
                {
                    throw new InvalidOperationException(
                              Resources.FormatValueMustBeProvidedInMessage(
                                  nameof(message.Data),
                                  RazorPluginMessageTypes.ResolveTagHelperDescriptors));
                }

                var messageData = message.Data.ToObject <ResolveTagHelperDescriptorsRequestData>();

                if (messageData.AssemblyName == null)
                {
                    throw new InvalidOperationException(
                              Resources.FormatValueMustBeProvidedInMessage(
                                  nameof(messageData.AssemblyName),
                                  RazorPluginMessageTypes.ResolveTagHelperDescriptors));
                }
                else if (messageData.SourceLocation == SourceLocation.Undefined)
                {
                    throw new InvalidOperationException(
                              Resources.FormatValueMustBeProvidedInMessage(
                                  nameof(messageData.SourceLocation),
                                  RazorPluginMessageTypes.ResolveTagHelperDescriptors));
                }

                var assemblyName          = messageData.AssemblyName;
                var errorSink             = new ErrorSink();
                var tagHelperTypeResolver = new AssemblyLoadContextTagHelperTypeResolver(assemblyLoadContext);
                var tagHelperTypes        = tagHelperTypeResolver.Resolve(
                    assemblyName,
                    messageData.SourceLocation,
                    errorSink);
                var tagHelperDescriptors = tagHelperTypes.SelectMany(
                    type => TagHelperDescriptorFactory.CreateDescriptors(
                        assemblyName,
                        type,
                        designTime: true,
                        errorSink: errorSink));

                var responseMessage = new ResolveTagHelperDescriptorsMessage(
                    new ResolveTagHelperDescriptorsResponseData
                {
                    AssemblyName = assemblyName,
                    Descriptors  = tagHelperDescriptors,
                    Errors       = errorSink.Errors
                });

                _messageBroker.SendMessage(responseMessage);
                break;

            default:
                // Unknown message.
                return(false);
            }

            return(true);
        }