From abaf3bba501367d1f24648b83ebb408fe64da2eb Mon Sep 17 00:00:00 2001 From: jacalvar Date: Thu, 24 Mar 2016 22:00:04 -0700 Subject: [PATCH] Make dependencies injectable in TagHelperDescriptorResolver. * Added an interface for ITagHelperTypeResolver and made TagHelperTypeResolver implement it. * Added an interface for ITagHelperTypeDescriptorFactory and made TagHelperDescriptorFactory implement it. * Added a constructor on TagHelperDescriptorResolver that takes in an ITagHelperTypeResolver and ITagHelperDescriptorFactory. --- .../TagHelpers/ITagHelperDescriptorFactory.cs | 28 +++++++++++++++++ .../TagHelpers/ITagHelperTypeResolver.cs | 28 +++++++++++++++++ .../TagHelpers/TagHelperConventions.cs | 30 +++++++++++++++++++ .../TagHelpers/TagHelperDescriptorFactory.cs | 14 ++------- .../TagHelpers/TagHelperDescriptorResolver.cs | 8 ++--- .../TagHelpers/TagHelperTypeResolver.cs | 20 ++----------- 6 files changed, 95 insertions(+), 33 deletions(-) create mode 100644 src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/ITagHelperDescriptorFactory.cs create mode 100644 src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/ITagHelperTypeResolver.cs create mode 100644 src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperConventions.cs diff --git a/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/ITagHelperDescriptorFactory.cs b/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/ITagHelperDescriptorFactory.cs new file mode 100644 index 0000000000..c7d9c597d3 --- /dev/null +++ b/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/ITagHelperDescriptorFactory.cs @@ -0,0 +1,28 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using Microsoft.AspNetCore.Razor.Compilation.TagHelpers; + +namespace Microsoft.AspNetCore.Razor.Runtime.TagHelpers +{ + /// + /// Factory for instances. + /// + public interface ITagHelperDescriptorFactory + { + /// + /// Creates a from the given . + /// + /// The assembly name that contains . + /// The to create a from. + /// + /// The used to collect s encountered + /// when creating s for the given . + /// + /// A collection of s that describe the given . + /// + IEnumerable CreateDescriptors(string assemblyName, Type type, ErrorSink errorSink); + } +} diff --git a/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/ITagHelperTypeResolver.cs b/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/ITagHelperTypeResolver.cs new file mode 100644 index 0000000000..c2770dffe7 --- /dev/null +++ b/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/ITagHelperTypeResolver.cs @@ -0,0 +1,28 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Reflection; +using Microsoft.AspNetCore.Razor.TagHelpers; + +namespace Microsoft.AspNetCore.Razor.Runtime.TagHelpers +{ + /// + /// Locates valid s within an assembly. + /// + public interface ITagHelperTypeResolver + { + /// + /// Locates valid types from the named . + /// + /// The name of an to search. + /// The of the associated + /// responsible for the current call. + /// + /// The used to record errors found when resolving + /// types. + /// An of valid types. + IEnumerable Resolve(string name, SourceLocation documentLocation, ErrorSink errorSink); + } +} diff --git a/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperConventions.cs b/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperConventions.cs new file mode 100644 index 0000000000..94bf4a69d5 --- /dev/null +++ b/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperConventions.cs @@ -0,0 +1,30 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Reflection; +using Microsoft.AspNetCore.Razor.TagHelpers; + +namespace Microsoft.AspNetCore.Razor.Runtime.TagHelpers +{ + /// + /// Default convention for determining if a type is a tag helper. + /// + public static class TagHelperConventions + { + private static readonly TypeInfo ITagHelperTypeInfo = typeof(ITagHelper).GetTypeInfo(); + + /// + /// Indicates whether or not the is a tag helper. + /// + /// The . + /// true if is a tag helper; false otherwise. + public static bool IsTagHelper(TypeInfo typeInfo) + { + return !typeInfo.IsNested && + typeInfo.IsPublic && + !typeInfo.IsAbstract && + !typeInfo.IsGenericType && + ITagHelperTypeInfo.IsAssignableFrom(typeInfo); + } + } +} diff --git a/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperDescriptorFactory.cs b/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperDescriptorFactory.cs index c48c7fcb72..b6defbda5a 100644 --- a/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperDescriptorFactory.cs +++ b/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperDescriptorFactory.cs @@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.Razor.Runtime.TagHelpers /// /// Factory for s from s. /// - public class TagHelperDescriptorFactory + public class TagHelperDescriptorFactory : ITagHelperDescriptorFactory { private const string DataDashPrefix = "data-"; private const string TagHelperNameEnding = "TagHelper"; @@ -59,17 +59,7 @@ namespace Microsoft.AspNetCore.Razor.Runtime.TagHelpers _designTime = designTime; } - /// - /// Creates a from the given . - /// - /// The assembly name that contains . - /// The to create a from. - /// - /// The used to collect s encountered - /// when creating s for the given . - /// - /// A collection of s that describe the given . - /// + /// public virtual IEnumerable CreateDescriptors( string assemblyName, Type type, diff --git a/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperDescriptorResolver.cs b/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperDescriptorResolver.cs index b209c45a20..59eadf06e2 100644 --- a/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperDescriptorResolver.cs +++ b/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperDescriptorResolver.cs @@ -23,8 +23,8 @@ namespace Microsoft.AspNetCore.Razor.Runtime.TagHelpers { TagHelperDirectiveType.TagHelperPrefix, SyntaxConstants.CSharp.TagHelperPrefixKeyword }, }; - private readonly TagHelperTypeResolver _typeResolver; - private readonly TagHelperDescriptorFactory _descriptorFactory; + private readonly ITagHelperTypeResolver _typeResolver; + private readonly ITagHelperDescriptorFactory _descriptorFactory; /// /// Instantiates a new instance of the class. @@ -43,8 +43,8 @@ namespace Microsoft.AspNetCore.Razor.Runtime.TagHelpers /// The . /// The . public TagHelperDescriptorResolver( - TagHelperTypeResolver typeResolver, - TagHelperDescriptorFactory descriptorFactory) + ITagHelperTypeResolver typeResolver, + ITagHelperDescriptorFactory descriptorFactory) { _typeResolver = typeResolver; _descriptorFactory = descriptorFactory; diff --git a/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperTypeResolver.cs b/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperTypeResolver.cs index b19eb3bc6b..c4c4c0843c 100644 --- a/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperTypeResolver.cs +++ b/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperTypeResolver.cs @@ -12,20 +12,11 @@ namespace Microsoft.AspNetCore.Razor.Runtime.TagHelpers /// /// Class that locates valid s within an assembly. /// - public class TagHelperTypeResolver + public class TagHelperTypeResolver : ITagHelperTypeResolver { private static readonly TypeInfo ITagHelperTypeInfo = typeof(ITagHelper).GetTypeInfo(); - /// - /// Locates valid types from the named . - /// - /// The name of an to search. - /// The of the associated - /// responsible for the current call. - /// - /// The used to record errors found when resolving - /// types. - /// An of valid types. + /// public IEnumerable Resolve( string name, SourceLocation documentLocation, @@ -96,12 +87,7 @@ namespace Microsoft.AspNetCore.Razor.Runtime.TagHelpers throw new ArgumentNullException(nameof(typeInfo)); } - return - !typeInfo.IsNested && - typeInfo.IsPublic && - !typeInfo.IsAbstract && - !typeInfo.IsGenericType && - ITagHelperTypeInfo.IsAssignableFrom(typeInfo); + return TagHelperConventions.IsTagHelper(typeInfo); } } } \ No newline at end of file