diff --git a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs index fd9cff000b..420194f732 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs +++ b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs @@ -45,34 +45,44 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers nameof(lookupText)); } - var tagHelperTypes = ResolveTagHelperTypes(lookupStrings); + // Grab the assembly name from the lookup text strings. Due to our supported lookupText formats it will + // always be the last element provided. + var assemblyName = lookupStrings.Last().Trim(); + + // Retrieve all TagHelperDescriptors that exist within the given assemblyName. + var descriptors = ResolveDescriptorsInAssembly(assemblyName); + + // Check if the lookupText specifies a type to search for. + if (lookupStrings.Length == 2) + { + // The user provided a type name retrieve it so we can prune our descriptors. + var typeName = lookupStrings[0].Trim(); + + descriptors = descriptors.Where(descriptor => + string.Equals(descriptor.TagHelperName, typeName, StringComparison.Ordinal)); + } + + return descriptors; + } + + /// + /// Resolves all s for s from the given + /// . + /// + /// + /// The name of the assembly to resolve s from. + /// + /// s that represent s from the given + /// . + protected virtual IEnumerable ResolveDescriptorsInAssembly(string assemblyName) + { + // Resolve valid tag helper types from the assembly. + var tagHelperTypes = _typeResolver.Resolve(assemblyName); // Convert types to TagHelperDescriptors var descriptors = tagHelperTypes.SelectMany(TagHelperDescriptorFactory.CreateDescriptors); return descriptors; } - - private IEnumerable ResolveTagHelperTypes(string[] lookupStrings) - { - // Grab the assembly name from the lookup text strings. Due to our supported lookupText formats it will - // always be the last element provided. - var assemblyName = lookupStrings.Last().Trim(); - - // Resolve valid tag helper types from the assembly. - var types = _typeResolver.Resolve(assemblyName); - - // Check if the lookupText specifies a type to search for. - if (lookupStrings.Length == 2) - { - // The user provided a type name retrieve the value and trim it. - var typeName = lookupStrings[0].Trim(); - - types = types.Where(type => - string.Equals(type.Namespace + "." + type.Name, typeName, StringComparison.Ordinal)); - } - - return types; - } } } \ No newline at end of file