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(