diff --git a/src/Microsoft.AspNetCore.Mvc.Localization/ViewLocalizer.cs b/src/Microsoft.AspNetCore.Mvc.Localization/ViewLocalizer.cs index d5cec94b0f..3fddf90af7 100644 --- a/src/Microsoft.AspNetCore.Mvc.Localization/ViewLocalizer.cs +++ b/src/Microsoft.AspNetCore.Mvc.Localization/ViewLocalizer.cs @@ -18,7 +18,7 @@ namespace Microsoft.AspNetCore.Mvc.Localization /// An implementation that derives the resource location from the executing view's /// file path. /// - public class ViewLocalizer : IViewLocalizer, ICanHasViewContext + public class ViewLocalizer : IViewLocalizer, IViewContextAware { private readonly IHtmlLocalizerFactory _localizerFactory; private readonly string _applicationName; diff --git a/src/Microsoft.AspNetCore.Mvc.Razor/RazorPageActivator.cs b/src/Microsoft.AspNetCore.Mvc.Razor/RazorPageActivator.cs index c074a42f73..5ed5746211 100644 --- a/src/Microsoft.AspNetCore.Mvc.Razor/RazorPageActivator.cs +++ b/src/Microsoft.AspNetCore.Mvc.Razor/RazorPageActivator.cs @@ -9,7 +9,6 @@ using Microsoft.AspNetCore.Mvc.Razor.Internal; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.Routing; using Microsoft.AspNetCore.Mvc.ViewFeatures; -using Microsoft.AspNetCore.Mvc.ViewFeatures.Internal; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Internal; @@ -123,7 +122,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor valueAccessor = context => { var serviceProvider = context.HttpContext.RequestServices; - var factory = (IUrlHelperFactory)serviceProvider.GetRequiredService(typeof(IUrlHelperFactory)); + var factory = serviceProvider.GetRequiredService(); return factory.GetUrlHelper(context); }; } @@ -133,11 +132,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor { var serviceProvider = context.HttpContext.RequestServices; var value = serviceProvider.GetRequiredService(property.PropertyType); - var canHasViewContext = value as ICanHasViewContext; - if (canHasViewContext != null) - { - canHasViewContext.Contextualize(context); - } + (value as IViewContextAware)?.Contextualize(context); return value; }; diff --git a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/IViewContextAware.cs b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/IViewContextAware.cs new file mode 100644 index 0000000000..21e2d9d43e --- /dev/null +++ b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/IViewContextAware.cs @@ -0,0 +1,20 @@ +// 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 Microsoft.AspNetCore.Mvc.Rendering; + +namespace Microsoft.AspNetCore.Mvc.ViewFeatures +{ + /// + /// Contract for contextualizing a property activated by a view with the . + /// + /// This interface is used for contextualizing properties added to a Razor page using @inject. + public interface IViewContextAware + { + /// + /// Contextualizes the instance with the specified . + /// + /// The . + void Contextualize(ViewContext viewContext); + } +} diff --git a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Internal/ICanHasViewContext.cs b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Internal/ICanHasViewContext.cs deleted file mode 100644 index 35a9bd9bef..0000000000 --- a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/Internal/ICanHasViewContext.cs +++ /dev/null @@ -1,12 +0,0 @@ -// 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 Microsoft.AspNetCore.Mvc.Rendering; - -namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal -{ - public interface ICanHasViewContext - { - void Contextualize(ViewContext viewContext); - } -} diff --git a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewComponentResult.cs b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewComponentResult.cs index feb16b3b8f..f419978342 100644 --- a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewComponentResult.cs +++ b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewComponentResult.cs @@ -120,7 +120,7 @@ namespace Microsoft.AspNetCore.Mvc writer, htmlHelperOptions); - (viewComponentHelper as ICanHasViewContext)?.Contextualize(viewContext); + (viewComponentHelper as IViewContextAware)?.Contextualize(viewContext); var result = await GetViewComponentResult(viewComponentHelper, logger); result.WriteTo(writer, htmlEncoder); diff --git a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewComponents/DefaultViewComponentHelper.cs b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewComponents/DefaultViewComponentHelper.cs index b5e6adfd84..5d63943239 100644 --- a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewComponents/DefaultViewComponentHelper.cs +++ b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewComponents/DefaultViewComponentHelper.cs @@ -16,7 +16,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewComponents /// /// Default implementation for . /// - public class DefaultViewComponentHelper : IViewComponentHelper, ICanHasViewContext + public class DefaultViewComponentHelper : IViewComponentHelper, IViewContextAware { private readonly IViewComponentDescriptorCollectionProvider _descriptorProvider; private readonly HtmlEncoder _htmlEncoder; diff --git a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewFeatures/HtmlHelper.cs b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewFeatures/HtmlHelper.cs index 90d9c945f0..a3a61a2191 100644 --- a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewFeatures/HtmlHelper.cs +++ b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewFeatures/HtmlHelper.cs @@ -20,7 +20,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures /// /// Default implementation of . /// - public class HtmlHelper : IHtmlHelper, ICanHasViewContext + public class HtmlHelper : IHtmlHelper, IViewContextAware { public static readonly string ValidationInputCssClassName = "input-validation-error"; public static readonly string ValidationInputValidCssClassName = "input-validation-valid"; diff --git a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewFeatures/TemplateRenderer.cs b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewFeatures/TemplateRenderer.cs index 0344b4ee97..9ab89c98d1 100644 --- a/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewFeatures/TemplateRenderer.cs +++ b/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewFeatures/TemplateRenderer.cs @@ -255,7 +255,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal { var newHelper = viewContext.HttpContext.RequestServices.GetRequiredService(); - var contextable = newHelper as ICanHasViewContext; + var contextable = newHelper as IViewContextAware; if (contextable != null) { var newViewContext = new ViewContext(viewContext, viewContext.View, viewData, viewContext.Writer); diff --git a/test/Microsoft.AspNetCore.Mvc.Razor.Test/RazorPageActivatorTest.cs b/test/Microsoft.AspNetCore.Mvc.Razor.Test/RazorPageActivatorTest.cs index 6129984e76..14fe2fc8c9 100644 --- a/test/Microsoft.AspNetCore.Mvc.Razor.Test/RazorPageActivatorTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Razor.Test/RazorPageActivatorTest.cs @@ -3,21 +3,17 @@ using System; using System.Diagnostics; -using System.Globalization; using System.IO; using System.Text.Encodings.Web; using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Internal; using Microsoft.AspNetCore.Mvc.Abstractions; using Microsoft.AspNetCore.Mvc.ModelBinding; -using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata; using Microsoft.AspNetCore.Mvc.Razor.Internal; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.Routing; using Microsoft.AspNetCore.Mvc.ViewEngines; using Microsoft.AspNetCore.Mvc.ViewFeatures; -using Microsoft.AspNetCore.Mvc.ViewFeatures.Internal; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.WebEncoders.Testing; @@ -323,6 +319,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor } } + private class MyService : IViewContextAware private class HasIncorrectViewDataPropertyType : RazorPage { [RazorInject] @@ -385,7 +382,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor { } - private class MyService : ICanHasViewContext + private class MyService : IViewContextAware { public ViewContext ViewContext { get; private set; } diff --git a/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/Internal/DefaultEditorTemplatesTest.cs b/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/Internal/DefaultEditorTemplatesTest.cs index aa7c8a547c..1682c5808b 100644 --- a/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/Internal/DefaultEditorTemplatesTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/Internal/DefaultEditorTemplatesTest.cs @@ -917,7 +917,7 @@ Environment.NewLine; public string OrderedProperty1 { get; set; } } - private class StubbyHtmlHelper : IHtmlHelper, ICanHasViewContext + private class StubbyHtmlHelper : IHtmlHelper, IViewContextAware { private readonly IHtmlHelper _innerHelper; @@ -969,7 +969,7 @@ Environment.NewLine; public void Contextualize(ViewContext viewContext) { - (_innerHelper as ICanHasViewContext)?.Contextualize(viewContext); + (_innerHelper as IViewContextAware)?.Contextualize(viewContext); } public IHtmlContent ActionLink(