Add extensibility point to resolve descriptors in assembly.
- Modified our default TagHelperDescriptorResolver to provide a protected virtual method that it uses under the covers to resolve descriptors for an entire assembly. This will enable tooling to cache descriptors on a per-assembly basis. #214
This commit is contained in:
parent
829faaaa4b
commit
bad8b16a2a
|
|
@ -45,34 +45,44 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers
|
||||||
nameof(lookupText));
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Resolves all <see cref="TagHelperDescriptor"/>s for <see cref="ITagHelper"/>s from the given
|
||||||
|
/// <paramref name="assemblyName"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="assemblyName">
|
||||||
|
/// The name of the assembly to resolve <see cref="TagHelperDescriptor"/>s from.
|
||||||
|
/// </param>
|
||||||
|
/// <returns><see cref="TagHelperDescriptor"/>s that represent <see cref="ITagHelper"/>s from the given
|
||||||
|
/// <paramref name="assemblyName"/>.</returns>
|
||||||
|
protected virtual IEnumerable<TagHelperDescriptor> ResolveDescriptorsInAssembly(string assemblyName)
|
||||||
|
{
|
||||||
|
// Resolve valid tag helper types from the assembly.
|
||||||
|
var tagHelperTypes = _typeResolver.Resolve(assemblyName);
|
||||||
|
|
||||||
// Convert types to TagHelperDescriptors
|
// Convert types to TagHelperDescriptors
|
||||||
var descriptors = tagHelperTypes.SelectMany(TagHelperDescriptorFactory.CreateDescriptors);
|
var descriptors = tagHelperTypes.SelectMany(TagHelperDescriptorFactory.CreateDescriptors);
|
||||||
|
|
||||||
return descriptors;
|
return descriptors;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<Type> 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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue