Added ViewComponentTagHelperDescriptorResolver and related stuff

This commit is contained in:
Ajay Bhargav Baaskaran 2016-09-15 17:12:43 -07:00
parent 760c8f3867
commit 0cfd5363f8
7 changed files with 81 additions and 5 deletions

View File

@ -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.
/// </summary>
public string ViewContextTypeName { get; set; }
/// <summary>
/// Name of the ViewContextAttribute type for view execution.
/// </summary>
public string ViewContextAttributeTypeName { get; set; }
}
}

View File

@ -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(

View File

@ -165,7 +165,11 @@ namespace Microsoft.Extensions.DependencyInjection
services.TryAddSingleton<ITagHelperTypeResolver, TagHelperTypeResolver>();
services.TryAddSingleton<ITagHelperDescriptorFactory>(s => new TagHelperDescriptorFactory(designTime: false));
services.TryAddSingleton<ITagHelperDescriptorResolver, TagHelperDescriptorResolver>();
services.TryAddSingleton<TagHelperDescriptorResolver, TagHelperDescriptorResolver>();
// And ViewComponentTagHelper resolver.
services.TryAddSingleton<ViewComponentTagHelperDescriptorResolver, ViewComponentTagHelperDescriptorResolver>();
services.TryAddSingleton<ITagHelperDescriptorResolver, CompositeTagHelperDescriptorResolver>();
// Caches compilation artifacts across the lifetime of the application.
services.TryAddSingleton<ICompilerCacheProvider, DefaultCompilerCacheProvider>();

View File

@ -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<TagHelperDescriptorResolver> _resolvers;
public CompositeTagHelperDescriptorResolver(
TagHelperDescriptorResolver tagHelperDescriptorResolver,
ViewComponentTagHelperDescriptorResolver viewComponentTagHelperDescriptorResolver)
{
_resolvers = new List<TagHelperDescriptorResolver>();
_resolvers.Add(tagHelperDescriptorResolver);
_resolvers.Add(viewComponentTagHelperDescriptorResolver);
}
public IEnumerable<TagHelperDescriptor> Resolve(TagHelperDescriptorResolutionContext resolutionContext)
{
var descriptors = new List<TagHelperDescriptor>();
foreach (var resolver in _resolvers)
{
var currentDescriptors = resolver.Resolve(resolutionContext);
descriptors.AddRange(currentDescriptors);
}
return descriptors;
}
}
}

View File

@ -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<TagHelperDescriptor> ResolveDescriptorsInAssembly(
string assemblyName,
SourceLocation documentLocation,
ErrorSink errorSink)
{
return _descriptorFactory.CreateDescriptors(assemblyName);
}
}
}

View File

@ -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;

View File

@ -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)