[Fixes #5379] Dont generate TagHelperDescriptors for ViewComponents with generic parameters

This commit is contained in:
Ajay Bhargav Baaskaran 2016-10-07 11:27:20 -07:00
parent ed3b750ad2
commit e987e2107f
2 changed files with 30 additions and 8 deletions

View File

@ -56,6 +56,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
StringComparison.Ordinal)); StringComparison.Ordinal));
var tagHelperDescriptors = viewComponentDescriptors var tagHelperDescriptors = viewComponentDescriptors
.Where(descriptor => !descriptor.Parameters.Any(parameter => parameter.ParameterType.GetTypeInfo().IsGenericType))
.Select(viewComponentDescriptor => CreateDescriptor(viewComponentDescriptor)); .Select(viewComponentDescriptor => CreateDescriptor(viewComponentDescriptor));
return tagHelperDescriptors; return tagHelperDescriptors;

View File

@ -62,7 +62,11 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Test.Internal
{ {
} }
public void TestInvokeTwo(TestEnum testEnum, Dictionary<string, int> testDictionary, int baz = 5) public void TestInvokeTwo(TestEnum testEnum, string testString, int baz = 5)
{
}
public void InvokeWithGenericParams(List<string> Foo, Dictionary<string, int> Bar)
{ {
} }
@ -75,7 +79,9 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Test.Internal
ShortName = "One", ShortName = "One",
MethodInfo = typeof(ViewComponentTagHelperDescriptorFactoryTest) MethodInfo = typeof(ViewComponentTagHelperDescriptorFactoryTest)
.GetMethod(nameof(ViewComponentTagHelperDescriptorFactoryTest.TestInvokeOne)), .GetMethod(nameof(ViewComponentTagHelperDescriptorFactoryTest.TestInvokeOne)),
TypeInfo = typeof(ViewComponentTagHelperDescriptorFactory).GetTypeInfo() TypeInfo = typeof(ViewComponentTagHelperDescriptorFactory).GetTypeInfo(),
Parameters = typeof(ViewComponentTagHelperDescriptorFactoryTest)
.GetMethod(nameof(ViewComponentTagHelperDescriptorFactoryTest.TestInvokeOne)).GetParameters()
}; };
private readonly ViewComponentDescriptor _viewComponentDescriptorTwo = new ViewComponentDescriptor private readonly ViewComponentDescriptor _viewComponentDescriptorTwo = new ViewComponentDescriptor
@ -85,7 +91,21 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Test.Internal
ShortName = "Two", ShortName = "Two",
MethodInfo = typeof(ViewComponentTagHelperDescriptorFactoryTest) MethodInfo = typeof(ViewComponentTagHelperDescriptorFactoryTest)
.GetMethod(nameof(ViewComponentTagHelperDescriptorFactoryTest.TestInvokeTwo)), .GetMethod(nameof(ViewComponentTagHelperDescriptorFactoryTest.TestInvokeTwo)),
TypeInfo = typeof(ViewComponentTagHelperDescriptorFactoryTest).GetTypeInfo() TypeInfo = typeof(ViewComponentTagHelperDescriptorFactoryTest).GetTypeInfo(),
Parameters = typeof(ViewComponentTagHelperDescriptorFactoryTest)
.GetMethod(nameof(ViewComponentTagHelperDescriptorFactoryTest.TestInvokeTwo)).GetParameters()
};
private readonly ViewComponentDescriptor _viewComponentDescriptorGeneric = new ViewComponentDescriptor
{
DisplayName = "GenericDisplayName",
FullName = "GenericViewComponent",
ShortName = "Generic",
MethodInfo = typeof(ViewComponentTagHelperDescriptorFactoryTest)
.GetMethod(nameof(ViewComponentTagHelperDescriptorFactoryTest.InvokeWithGenericParams)),
TypeInfo = typeof(ViewComponentTagHelperDescriptorFactoryTest).GetTypeInfo(),
Parameters = typeof(ViewComponentTagHelperDescriptorFactoryTest)
.GetMethod(nameof(ViewComponentTagHelperDescriptorFactoryTest.InvokeWithGenericParams)).GetParameters()
}; };
public TagHelperDescriptor GetTagHelperDescriptorOne() public TagHelperDescriptor GetTagHelperDescriptorOne()
@ -146,9 +166,9 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Test.Internal
new TagHelperAttributeDescriptor new TagHelperAttributeDescriptor
{ {
Name = "test-dictionary", Name = "test-string",
PropertyName = "testDictionary", PropertyName = "testString",
TypeName = typeof(Dictionary<string, int>).FullName TypeName = typeof(string).FullName
}, },
new TagHelperAttributeDescriptor new TagHelperAttributeDescriptor
@ -167,7 +187,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Test.Internal
new TagHelperRequiredAttributeDescriptor new TagHelperRequiredAttributeDescriptor
{ {
Name = "test-dictionary" Name = "test-string"
}, },
new TagHelperRequiredAttributeDescriptor new TagHelperRequiredAttributeDescriptor
@ -186,7 +206,8 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Test.Internal
return new List<ViewComponentDescriptor> return new List<ViewComponentDescriptor>
{ {
_viewComponentDescriptorOne, _viewComponentDescriptorOne,
_viewComponentDescriptorTwo _viewComponentDescriptorTwo,
_viewComponentDescriptorGeneric
}; };
} }
} }