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