diff --git a/src/Microsoft.AspNetCore.Mvc.Razor.Host/Internal/GeneratedViewComponentTagHelperContext.cs b/src/Microsoft.AspNetCore.Mvc.Razor.Host/Internal/GeneratedViewComponentTagHelperContext.cs
index 8008fe71e9..b72d7399c0 100644
--- a/src/Microsoft.AspNetCore.Mvc.Razor.Host/Internal/GeneratedViewComponentTagHelperContext.cs
+++ b/src/Microsoft.AspNetCore.Mvc.Razor.Host/Internal/GeneratedViewComponentTagHelperContext.cs
@@ -17,6 +17,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host.Internal
InvokeAsyncMethodName = "InvokeAsync";
IViewComponentHelperTypeName = "Microsoft.AspNetCore.Mvc.IViewComponentHelper";
IViewContextAwareTypeName = "Microsoft.AspNetCore.Mvc.ViewFeatures.IViewContextAware";
+ ViewContextAttributeTypeName = "Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContextAttribute";
ViewContextTypeName = "Microsoft.AspNetCore.Mvc.Rendering.ViewContext";
}
@@ -44,5 +45,10 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host.Internal
/// Name of the ViewContext type for view execution.
///
public string ViewContextTypeName { get; set; }
+
+ ///
+ /// Name of the ViewContextAttribute type for view execution.
+ ///
+ public string ViewContextAttributeTypeName { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Microsoft.AspNetCore.Mvc.Razor.Host/Internal/ViewComponentTagHelperChunkVisitor.cs b/src/Microsoft.AspNetCore.Mvc.Razor.Host/Internal/ViewComponentTagHelperChunkVisitor.cs
index 1229412237..6ab3a03779 100644
--- a/src/Microsoft.AspNetCore.Mvc.Razor.Host/Internal/ViewComponentTagHelperChunkVisitor.cs
+++ b/src/Microsoft.AspNetCore.Mvc.Razor.Host/Internal/ViewComponentTagHelperChunkVisitor.cs
@@ -119,7 +119,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Host.Internal
Writer.Write("[")
.Write(typeof(HtmlAttributeNotBoundAttribute).FullName)
.WriteParameterSeparator()
- .Write($"global::{_context.ViewContextTypeName}")
+ .Write($"global::{_context.ViewContextAttributeTypeName}")
.WriteLine("]");
Writer.WriteAutoPropertyDeclaration(
diff --git a/src/Microsoft.AspNetCore.Mvc.Razor/DependencyInjection/MvcRazorMvcCoreBuilderExtensions.cs b/src/Microsoft.AspNetCore.Mvc.Razor/DependencyInjection/MvcRazorMvcCoreBuilderExtensions.cs
index 8e38d7f1b3..9ed52055fe 100644
--- a/src/Microsoft.AspNetCore.Mvc.Razor/DependencyInjection/MvcRazorMvcCoreBuilderExtensions.cs
+++ b/src/Microsoft.AspNetCore.Mvc.Razor/DependencyInjection/MvcRazorMvcCoreBuilderExtensions.cs
@@ -165,7 +165,11 @@ namespace Microsoft.Extensions.DependencyInjection
services.TryAddSingleton();
services.TryAddSingleton(s => new TagHelperDescriptorFactory(designTime: false));
- services.TryAddSingleton();
+ services.TryAddSingleton();
+
+ // And ViewComponentTagHelper resolver.
+ services.TryAddSingleton();
+ services.TryAddSingleton();
// Caches compilation artifacts across the lifetime of the application.
services.TryAddSingleton();
diff --git a/src/Microsoft.AspNetCore.Mvc.Razor/Internal/CompositeTagHelperDescriptorResolver.cs b/src/Microsoft.AspNetCore.Mvc.Razor/Internal/CompositeTagHelperDescriptorResolver.cs
new file mode 100644
index 0000000000..c276dc32c7
--- /dev/null
+++ b/src/Microsoft.AspNetCore.Mvc.Razor/Internal/CompositeTagHelperDescriptorResolver.cs
@@ -0,0 +1,36 @@
+// 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.Collections.Generic;
+using Microsoft.AspNetCore.Razor.Compilation.TagHelpers;
+using Microsoft.AspNetCore.Razor.Runtime.TagHelpers;
+
+namespace Microsoft.AspNetCore.Mvc.Razor.Internal
+{
+ public class CompositeTagHelperDescriptorResolver : ITagHelperDescriptorResolver
+ {
+ public IList _resolvers;
+
+ public CompositeTagHelperDescriptorResolver(
+ TagHelperDescriptorResolver tagHelperDescriptorResolver,
+ ViewComponentTagHelperDescriptorResolver viewComponentTagHelperDescriptorResolver)
+ {
+ _resolvers = new List();
+ _resolvers.Add(tagHelperDescriptorResolver);
+ _resolvers.Add(viewComponentTagHelperDescriptorResolver);
+ }
+
+ public IEnumerable Resolve(TagHelperDescriptorResolutionContext resolutionContext)
+ {
+ var descriptors = new List();
+
+ foreach (var resolver in _resolvers)
+ {
+ var currentDescriptors = resolver.Resolve(resolutionContext);
+ descriptors.AddRange(currentDescriptors);
+ }
+
+ return descriptors;
+ }
+ }
+}
diff --git a/src/Microsoft.AspNetCore.Mvc.Razor/Internal/ViewComponentTagHelperDescriptorResolver.cs b/src/Microsoft.AspNetCore.Mvc.Razor/Internal/ViewComponentTagHelperDescriptorResolver.cs
new file mode 100644
index 0000000000..090d58f5bb
--- /dev/null
+++ b/src/Microsoft.AspNetCore.Mvc.Razor/Internal/ViewComponentTagHelperDescriptorResolver.cs
@@ -0,0 +1,31 @@
+// 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.Collections.Generic;
+using Microsoft.AspNetCore.Mvc.ViewComponents;
+using Microsoft.AspNetCore.Razor;
+using Microsoft.AspNetCore.Razor.Compilation.TagHelpers;
+using Microsoft.AspNetCore.Razor.Runtime.TagHelpers;
+
+namespace Microsoft.AspNetCore.Mvc.Razor.Internal
+{
+ public class ViewComponentTagHelperDescriptorResolver : TagHelperDescriptorResolver
+ {
+ ViewComponentTagHelperDescriptorFactory _descriptorFactory;
+
+ public ViewComponentTagHelperDescriptorResolver(
+ IViewComponentDescriptorProvider viewComponentDescriptorProvider)
+ : base(designTime: true)
+ {
+ _descriptorFactory = new ViewComponentTagHelperDescriptorFactory(viewComponentDescriptorProvider);
+ }
+
+ protected override IEnumerable ResolveDescriptorsInAssembly(
+ string assemblyName,
+ SourceLocation documentLocation,
+ ErrorSink errorSink)
+ {
+ return _descriptorFactory.CreateDescriptors(assemblyName);
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.AspNetCore.Mvc.Razor.Host.Test/Internal/ViewComponentTagHelperChunkVisitorTest.cs b/test/Microsoft.AspNetCore.Mvc.Razor.Host.Test/Internal/ViewComponentTagHelperChunkVisitorTest.cs
index ecb9993dad..b3dc7fb59c 100644
--- a/test/Microsoft.AspNetCore.Mvc.Razor.Host.Test/Internal/ViewComponentTagHelperChunkVisitorTest.cs
+++ b/test/Microsoft.AspNetCore.Mvc.Razor.Host.Test/Internal/ViewComponentTagHelperChunkVisitorTest.cs
@@ -1,7 +1,6 @@
// 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.Mvc.Razor.Host.Internal;
diff --git a/test/Microsoft.AspNetCore.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/GeneratedViewComponentTagHelperClasses.cs b/test/Microsoft.AspNetCore.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/GeneratedViewComponentTagHelperClasses.cs
index 5556074723..c9a10c3b54 100644
--- a/test/Microsoft.AspNetCore.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/GeneratedViewComponentTagHelperClasses.cs
+++ b/test/Microsoft.AspNetCore.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/GeneratedViewComponentTagHelperClasses.cs
@@ -6,7 +6,7 @@ public class __Generated__FooViewComponentTagHelper : Microsoft.AspNetCore.Razor
{
_viewComponentHelper = viewComponentHelper;
}
- [Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeNotBoundAttribute, global::Microsoft.AspNetCore.Mvc.Rendering.ViewContext]
+ [Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeNotBoundAttribute, global::Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContextAttribute]
public global::Microsoft.AspNetCore.Mvc.Rendering.ViewContext ViewContext { get; set; }
public System.String Attribute { get; set; }
public override async global::System.Threading.Tasks.Task ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)
@@ -25,7 +25,7 @@ public class __Generated__BarViewComponentTagHelper : Microsoft.AspNetCore.Razor
{
_viewComponentHelper = viewComponentHelper;
}
- [Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeNotBoundAttribute, global::Microsoft.AspNetCore.Mvc.Rendering.ViewContext]
+ [Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeNotBoundAttribute, global::Microsoft.AspNetCore.Mvc.ViewFeatures.ViewContextAttribute]
public global::Microsoft.AspNetCore.Mvc.Rendering.ViewContext ViewContext { get; set; }
public System.String Attribute { get; set; }
public override async global::System.Threading.Tasks.Task ProcessAsync(Microsoft.AspNetCore.Razor.TagHelpers.TagHelperContext context, Microsoft.AspNetCore.Razor.TagHelpers.TagHelperOutput output)