Reacting to Hosting changes

This commit is contained in:
Pranav K 2016-03-15 09:15:40 -07:00
parent 1ae1cdb10b
commit bf1fc7dab3
18 changed files with 97 additions and 180 deletions

View File

@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyModel; using Microsoft.Extensions.DependencyModel;
using Microsoft.Extensions.PlatformAbstractions; using Microsoft.Extensions.PlatformAbstractions;
@ -23,8 +24,8 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
/// <summary> /// <summary>
/// Initializes a new instance of <see cref="DefaultAssemblyProvider"/>. /// Initializes a new instance of <see cref="DefaultAssemblyProvider"/>.
/// </summary> /// </summary>
/// <param name="environment">The <see cref="IApplicationEnvironment"/>.</param> /// <param name="environment">The <see cref="IHostingEnvironment"/>.</param>
public DefaultAssemblyProvider(IApplicationEnvironment environment) public DefaultAssemblyProvider(IHostingEnvironment environment)
: this( : this(
Assembly.Load(new AssemblyName(environment.ApplicationName)), Assembly.Load(new AssemblyName(environment.ApplicationName)),
DependencyContext.Load(Assembly.Load(new AssemblyName(environment.ApplicationName)))) DependencyContext.Load(Assembly.Load(new AssemblyName(environment.ApplicationName))))

View File

@ -24,7 +24,6 @@
"version": "1.0.0-*" "version": "1.0.0-*"
}, },
"Microsoft.Extensions.FileProviders.Abstractions": "1.0.0-*", "Microsoft.Extensions.FileProviders.Abstractions": "1.0.0-*",
"Microsoft.Extensions.PlatformAbstractions": "1.0.0-*",
"Microsoft.Extensions.DependencyModel": "1.0.0-*", "Microsoft.Extensions.DependencyModel": "1.0.0-*",
"Microsoft.Extensions.ClosedGenericMatcher.Sources": { "Microsoft.Extensions.ClosedGenericMatcher.Sources": {
"version": "1.0.0-*", "version": "1.0.0-*",

View File

@ -13,6 +13,7 @@ using System.Reflection.PortableExecutable;
using System.Runtime.Loader; using System.Runtime.Loader;
#endif #endif
using System.Text; using System.Text;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Razor.Compilation; using Microsoft.AspNetCore.Mvc.Razor.Compilation;
using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp;
@ -20,7 +21,6 @@ using Microsoft.CodeAnalysis.Text;
using Microsoft.Dnx.Compilation.CSharp; using Microsoft.Dnx.Compilation.CSharp;
using Microsoft.Extensions.CompilationAbstractions; using Microsoft.Extensions.CompilationAbstractions;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Microsoft.Extensions.PlatformAbstractions;
namespace Microsoft.AspNetCore.Mvc.Razor.Internal namespace Microsoft.AspNetCore.Mvc.Razor.Internal
{ {
@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
private readonly ConcurrentDictionary<string, AssemblyMetadata> _metadataFileCache = private readonly ConcurrentDictionary<string, AssemblyMetadata> _metadataFileCache =
new ConcurrentDictionary<string, AssemblyMetadata>(StringComparer.OrdinalIgnoreCase); new ConcurrentDictionary<string, AssemblyMetadata>(StringComparer.OrdinalIgnoreCase);
private readonly IApplicationEnvironment _environment; private readonly IHostingEnvironment _environment;
private readonly ILibraryExporter _libraryExporter; private readonly ILibraryExporter _libraryExporter;
private readonly RazorViewEngineOptions _options; private readonly RazorViewEngineOptions _options;
private readonly Lazy<List<MetadataReference>> _applicationReferences; private readonly Lazy<List<MetadataReference>> _applicationReferences;
@ -48,7 +48,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
/// <param name="optionsAccessor">Accessor to <see cref="RazorViewEngineOptions"/>.</param> /// <param name="optionsAccessor">Accessor to <see cref="RazorViewEngineOptions"/>.</param>
/// <param name="fileProviderAccessor">The <see cref="IRazorViewEngineFileProviderAccessor"/>.</param> /// <param name="fileProviderAccessor">The <see cref="IRazorViewEngineFileProviderAccessor"/>.</param>
public DnxRoslynCompilationService( public DnxRoslynCompilationService(
IApplicationEnvironment environment, IHostingEnvironment environment,
ILibraryExporter libraryExporter, ILibraryExporter libraryExporter,
IOptions<RazorViewEngineOptions> optionsAccessor, IOptions<RazorViewEngineOptions> optionsAccessor,
IRazorViewEngineFileProviderAccessor fileProviderAccessor) IRazorViewEngineFileProviderAccessor fileProviderAccessor)

View File

@ -7,10 +7,10 @@ using System.Diagnostics;
using System.Globalization; using System.Globalization;
using System.IO; using System.IO;
using System.Text; using System.Text;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using Microsoft.Extensions.PlatformAbstractions;
namespace Microsoft.AspNetCore.Mvc.Localization namespace Microsoft.AspNetCore.Mvc.Localization
{ {
@ -28,20 +28,20 @@ namespace Microsoft.AspNetCore.Mvc.Localization
/// Creates a new <see cref="ViewLocalizer"/>. /// Creates a new <see cref="ViewLocalizer"/>.
/// </summary> /// </summary>
/// <param name="localizerFactory">The <see cref="IHtmlLocalizerFactory"/>.</param> /// <param name="localizerFactory">The <see cref="IHtmlLocalizerFactory"/>.</param>
/// <param name="applicationEnvironment">The <see cref="IApplicationEnvironment"/>.</param> /// <param name="hostingEnvironment">The <see cref="IHostingEnvironment"/>.</param>
public ViewLocalizer(IHtmlLocalizerFactory localizerFactory, IApplicationEnvironment applicationEnvironment) public ViewLocalizer(IHtmlLocalizerFactory localizerFactory, IHostingEnvironment hostingEnvironment)
{ {
if (localizerFactory == null) if (localizerFactory == null)
{ {
throw new ArgumentNullException(nameof(localizerFactory)); throw new ArgumentNullException(nameof(localizerFactory));
} }
if (applicationEnvironment == null) if (hostingEnvironment == null)
{ {
throw new ArgumentNullException(nameof(applicationEnvironment)); throw new ArgumentNullException(nameof(hostingEnvironment));
} }
_applicationName = applicationEnvironment.ApplicationName; _applicationName = hostingEnvironment.ApplicationName;
_localizerFactory = localizerFactory; _localizerFactory = localizerFactory;
} }

View File

@ -23,14 +23,9 @@
} }
}, },
"frameworks": { "frameworks": {
"net451": { "net451": { },
"dependencies": {
"Microsoft.Extensions.PlatformAbstractions": "1.0.0-*"
}
},
"netstandard1.3": { "netstandard1.3": {
"dependencies": { "dependencies": {
"Microsoft.Extensions.PlatformAbstractions": "1.0.0-*",
"System.Collections.Concurrent": "4.0.12-*", "System.Collections.Concurrent": "4.0.12-*",
"System.ComponentModel.TypeConverter": "4.0.1-*", "System.ComponentModel.TypeConverter": "4.0.1-*",
"System.Reflection.Extensions": "4.0.1-*", "System.Reflection.Extensions": "4.0.1-*",

View File

@ -14,6 +14,7 @@ using System.Runtime.Loader;
#endif #endif
using System.Text; using System.Text;
using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Diagnostics;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Razor.Compilation; using Microsoft.AspNetCore.Mvc.Razor.Compilation;
using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp;
@ -23,7 +24,6 @@ using Microsoft.Extensions.DependencyModel;
using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Microsoft.Extensions.PlatformAbstractions;
namespace Microsoft.AspNetCore.Mvc.Razor.Internal namespace Microsoft.AspNetCore.Mvc.Razor.Internal
{ {
@ -50,12 +50,12 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
/// <summary> /// <summary>
/// Initalizes a new instance of the <see cref="DefaultRoslynCompilationService"/> class. /// Initalizes a new instance of the <see cref="DefaultRoslynCompilationService"/> class.
/// </summary> /// </summary>
/// <param name="environment">The environment for the executing application.</param> /// <param name="environment">The <see cref="IHostingEnvironment"/>.</param>
/// <param name="optionsAccessor">Accessor to <see cref="RazorViewEngineOptions"/>.</param> /// <param name="optionsAccessor">Accessor to <see cref="RazorViewEngineOptions"/>.</param>
/// <param name="fileProviderAccessor">The <see cref="IRazorViewEngineFileProviderAccessor"/>.</param> /// <param name="fileProviderAccessor">The <see cref="IRazorViewEngineFileProviderAccessor"/>.</param>
/// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param> /// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param>
public DefaultRoslynCompilationService( public DefaultRoslynCompilationService(
IApplicationEnvironment environment, IHostingEnvironment environment,
IOptions<RazorViewEngineOptions> optionsAccessor, IOptions<RazorViewEngineOptions> optionsAccessor,
IRazorViewEngineFileProviderAccessor fileProviderAccessor, IRazorViewEngineFileProviderAccessor fileProviderAccessor,
ILoggerFactory loggerFactory) ILoggerFactory loggerFactory)
@ -326,7 +326,7 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
mappedLineSpan.EndLinePosition.Character + 1); mappedLineSpan.EndLinePosition.Character + 1);
} }
private static DependencyContext GetDependencyContext(IApplicationEnvironment environment) private static DependencyContext GetDependencyContext(IHostingEnvironment environment)
{ {
if (environment.ApplicationName != null) if (environment.ApplicationName != null)
{ {

View File

@ -5,11 +5,11 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp;
using Microsoft.Extensions.DependencyModel; using Microsoft.Extensions.DependencyModel;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Microsoft.Extensions.PlatformAbstractions;
namespace Microsoft.AspNetCore.Mvc.Razor.Internal namespace Microsoft.AspNetCore.Mvc.Razor.Internal
{ {
@ -22,14 +22,14 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
/// <summary> /// <summary>
/// Initializes a new instance of <see cref="DependencyContextRazorViewEngineOptionsSetup"/>. /// Initializes a new instance of <see cref="DependencyContextRazorViewEngineOptionsSetup"/>.
/// </summary> /// </summary>
public DependencyContextRazorViewEngineOptionsSetup(IApplicationEnvironment applicationEnvironment) public DependencyContextRazorViewEngineOptionsSetup(IHostingEnvironment hostingEnvironment)
: base(options => ConfigureRazor(options, applicationEnvironment)) : base(options => ConfigureRazor(options, hostingEnvironment))
{ {
} }
private static void ConfigureRazor(RazorViewEngineOptions options, IApplicationEnvironment applicationEnvironment) private static void ConfigureRazor(RazorViewEngineOptions options, IHostingEnvironment hostingEnvironment)
{ {
var applicationAssembly = Assembly.Load(new AssemblyName(applicationEnvironment.ApplicationName)); var applicationAssembly = Assembly.Load(new AssemblyName(hostingEnvironment.ApplicationName));
var dependencyContext = DependencyContext.Load(applicationAssembly); var dependencyContext = DependencyContext.Load(applicationAssembly);
var compilationOptions = dependencyContext?.CompilationOptions ?? Extensions.DependencyModel.CompilationOptions.Default; var compilationOptions = dependencyContext?.CompilationOptions ?? Extensions.DependencyModel.CompilationOptions.Default;

View File

@ -5,10 +5,7 @@ using System.Linq;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Razor; using Microsoft.AspNetCore.Mvc.Razor;
using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Microsoft.Extensions.PlatformAbstractions;
namespace Microsoft.AspNetCore.Mvc namespace Microsoft.AspNetCore.Mvc
{ {
@ -20,21 +17,21 @@ namespace Microsoft.AspNetCore.Mvc
/// <summary> /// <summary>
/// Initializes a new instance of <see cref="RazorViewEngineOptions"/>. /// Initializes a new instance of <see cref="RazorViewEngineOptions"/>.
/// </summary> /// </summary>
/// <param name="applicationEnvironment"><see cref="IApplicationEnvironment"/> for the application.</param>
/// <param name="hostingEnvironment"><see cref="IHostingEnvironment"/> for the application.</param> /// <param name="hostingEnvironment"><see cref="IHostingEnvironment"/> for the application.</param>
public RazorViewEngineOptionsSetup( public RazorViewEngineOptionsSetup(
IApplicationEnvironment applicationEnvironment,
IHostingEnvironment hostingEnvironment) IHostingEnvironment hostingEnvironment)
: base(options => ConfigureRazor(options, applicationEnvironment, hostingEnvironment)) : base(options => ConfigureRazor(options, hostingEnvironment))
{ {
} }
private static void ConfigureRazor( private static void ConfigureRazor(
RazorViewEngineOptions razorOptions, RazorViewEngineOptions razorOptions,
IApplicationEnvironment applicationEnvironment,
IHostingEnvironment hostingEnvironment) IHostingEnvironment hostingEnvironment)
{ {
razorOptions.FileProviders.Add(new PhysicalFileProvider(applicationEnvironment.ApplicationBasePath)); if (hostingEnvironment.ContentRootFileProvider != null)
{
razorOptions.FileProviders.Add(hostingEnvironment.ContentRootFileProvider);
}
var compilationOptions = razorOptions.CompilationOptions; var compilationOptions = razorOptions.CompilationOptions;
string configurationSymbol; string configurationSymbol;

View File

@ -9,9 +9,9 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
{ {
public class MvcEncodedTestFixture<TStartup> : MvcTestFixture<TStartup> public class MvcEncodedTestFixture<TStartup> : MvcTestFixture<TStartup>
{ {
protected override void InitializeServices(IServiceCollection services, string relativePath) protected override void InitializeServices(IServiceCollection services)
{ {
base.InitializeServices(services, relativePath); base.InitializeServices(services);
services.AddTransient<HtmlEncoder, HtmlTestEncoder>(); services.AddTransient<HtmlEncoder, HtmlTestEncoder>();
services.AddTransient<JavaScriptEncoder, JavaScriptTestEncoder>(); services.AddTransient<JavaScriptEncoder, JavaScriptTestEncoder>();
services.AddTransient<UrlEncoder, UrlTestEncoder>(); services.AddTransient<UrlEncoder, UrlTestEncoder>();

View File

@ -36,7 +36,8 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
using (new CultureReplacer()) using (new CultureReplacer())
{ {
var builder = new WebHostBuilder() var builder = new WebHostBuilder()
.ConfigureServices(serviceCollection => InitializeServices(serviceCollection, relativePath)) .UseContentRoot(GetApplicationPath(relativePath))
.ConfigureServices(InitializeServices)
.UseStartup(typeof(TStartup)); .UseStartup(typeof(TStartup));
_server = new TestServer(builder); _server = new TestServer(builder);
@ -54,14 +55,22 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
_server.Dispose(); _server.Dispose();
} }
protected virtual void InitializeServices(IServiceCollection services, string relativePath) private static string GetApplicationPath(string relativePath)
{
var startupAssembly = typeof(TStartup).GetTypeInfo().Assembly;
var applicationName = startupAssembly.GetName().Name;
#if DNX451
var libraryManager = DnxPlatformServices.Default.LibraryManager;
var library = libraryManager.GetLibrary(applicationName);
return Path.GetDirectoryName(library.Path);
#else
var applicationBasePath = PlatformServices.Default.Application.ApplicationBasePath;
return Path.GetFullPath(Path.Combine(applicationBasePath, relativePath, applicationName));
#endif
}
protected virtual void InitializeServices(IServiceCollection services)
{ {
// When an application executes in a regular context, the application base path points to the root
// directory where the application is located, for example .../samples/MvcSample.Web. However, when
// executing an application as part of a test, the ApplicationBasePath of the IApplicationEnvironment
// points to the root folder of the test project.
// To compensate, we need to calculate the correct project path and override the application
// environment value so that components like the view engine work properly in the context of the test.
var startupAssembly = typeof(TStartup).GetTypeInfo().Assembly; var startupAssembly = typeof(TStartup).GetTypeInfo().Assembly;
var applicationName = startupAssembly.GetName().Name; var applicationName = startupAssembly.GetName().Name;
@ -69,21 +78,8 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
#if DNX451 #if DNX451
services.AddSingleton(CompilationServices.Default.LibraryExporter); services.AddSingleton(CompilationServices.Default.LibraryExporter);
services.AddSingleton<ICompilationService, DnxRoslynCompilationService>(); services.AddSingleton<ICompilationService, DnxRoslynCompilationService>();
var libraryManager = DnxPlatformServices.Default.LibraryManager;
var library = libraryManager.GetLibrary(applicationName);
var applicationRoot = Path.GetDirectoryName(library.Path);
#else
var applicationRoot = Path.GetFullPath(Path.Combine(
applicationEnvironment.ApplicationBasePath,
relativePath,
applicationName
));
#endif #endif
services.AddSingleton<IApplicationEnvironment>(
new TestApplicationEnvironment(applicationEnvironment, applicationName, applicationRoot));
// Inject a custom assembly provider. Overrides AddMvc() because that uses TryAdd(). // Inject a custom assembly provider. Overrides AddMvc() because that uses TryAdd().
var assemblyProvider = new StaticAssemblyProvider(); var assemblyProvider = new StaticAssemblyProvider();
assemblyProvider.CandidateAssemblies.Add(startupAssembly); assemblyProvider.CandidateAssemblies.Add(startupAssembly);

View File

@ -1,44 +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 System.Runtime.Versioning;
using Microsoft.Extensions.PlatformAbstractions;
namespace Microsoft.AspNetCore.Mvc.FunctionalTests
{
// An application environment that overrides the base path of the original
// application environment in order to make it point to the folder of the original web
// aaplication so that components like ViewEngines can find views as if they were executing
// in a regular context.
public class TestApplicationEnvironment : IApplicationEnvironment
{
private readonly IApplicationEnvironment _original;
public TestApplicationEnvironment(IApplicationEnvironment original, string name, string basePath)
{
_original = original;
ApplicationName = name;
ApplicationBasePath = basePath;
}
public string ApplicationName { get; }
public string ApplicationVersion
{
get
{
return _original.ApplicationVersion;
}
}
public string ApplicationBasePath { get; }
public FrameworkName RuntimeFramework
{
get
{
return _original.RuntimeFramework;
}
}
}
}

View File

@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Globalization; using System.Globalization;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using Microsoft.Extensions.PlatformAbstractions; using Microsoft.Extensions.PlatformAbstractions;
@ -39,9 +40,6 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Test
public void HtmlLocalizerOfTTest_UseIndexerWithArguments_ReturnsLocalizedHtmlString() public void HtmlLocalizerOfTTest_UseIndexerWithArguments_ReturnsLocalizedHtmlString()
{ {
// Arrange // Arrange
var applicationEnvironment = new Mock<IApplicationEnvironment>();
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
var localizedString = new LocalizedHtmlString("Hello", "Bonjour test"); var localizedString = new LocalizedHtmlString("Hello", "Bonjour test");
var htmlLocalizer = new Mock<IHtmlLocalizer>(); var htmlLocalizer = new Mock<IHtmlLocalizer>();

View File

@ -5,10 +5,10 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewEngines; using Microsoft.AspNetCore.Mvc.ViewEngines;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
using Microsoft.Extensions.PlatformAbstractions;
using Moq; using Moq;
using Xunit; using Xunit;
@ -31,15 +31,15 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Test
public void ViewLocalizer_LooksForCorrectResourceBaseNameLocation(string appName, string viewPath, string executingPath, string expectedBaseName) public void ViewLocalizer_LooksForCorrectResourceBaseNameLocation(string appName, string viewPath, string executingPath, string expectedBaseName)
{ {
// Arrange // Arrange
var applicationEnvironment = new Mock<IApplicationEnvironment>(); var hostingEnvironment = new Mock<IHostingEnvironment>();
applicationEnvironment.Setup(a => a.ApplicationName).Returns(appName); hostingEnvironment.Setup(a => a.ApplicationName).Returns(appName);
var htmlLocalizerFactory = new Mock<IHtmlLocalizerFactory>(MockBehavior.Loose); var htmlLocalizerFactory = new Mock<IHtmlLocalizerFactory>(MockBehavior.Loose);
var view = new Mock<IView>(); var view = new Mock<IView>();
view.Setup(v => v.Path).Returns(viewPath); view.Setup(v => v.Path).Returns(viewPath);
var viewContext = new ViewContext(); var viewContext = new ViewContext();
viewContext.ExecutingFilePath = executingPath; viewContext.ExecutingFilePath = executingPath;
viewContext.View = view.Object; viewContext.View = view.Object;
var viewLocalizer = new ViewLocalizer(htmlLocalizerFactory.Object, applicationEnvironment.Object); var viewLocalizer = new ViewLocalizer(htmlLocalizerFactory.Object, hostingEnvironment.Object);
// Act // Act
viewLocalizer.Contextualize(viewContext); viewLocalizer.Contextualize(viewContext);
@ -55,8 +55,8 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Test
public void ViewLocalizer_UseIndexer_ReturnsLocalizedHtmlString() public void ViewLocalizer_UseIndexer_ReturnsLocalizedHtmlString()
{ {
// Arrange // Arrange
var applicationEnvironment = new Mock<IApplicationEnvironment>(); var hostingEnvironment = new Mock<IHostingEnvironment>();
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication"); hostingEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
var localizedString = new LocalizedHtmlString("Hello", "Bonjour"); var localizedString = new LocalizedHtmlString("Hello", "Bonjour");
@ -67,7 +67,7 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Test
htmlLocalizerFactory.Setup(h => h.Create("TestApplication.example", "TestApplication")) htmlLocalizerFactory.Setup(h => h.Create("TestApplication.example", "TestApplication"))
.Returns(htmlLocalizer.Object); .Returns(htmlLocalizer.Object);
var viewLocalizer = new ViewLocalizer(htmlLocalizerFactory.Object, applicationEnvironment.Object); var viewLocalizer = new ViewLocalizer(htmlLocalizerFactory.Object, hostingEnvironment.Object);
var view = new Mock<IView>(); var view = new Mock<IView>();
view.Setup(v => v.Path).Returns("example"); view.Setup(v => v.Path).Returns("example");
@ -87,8 +87,8 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Test
public void ViewLocalizer_UseIndexerWithArguments_ReturnsLocalizedHtmlString() public void ViewLocalizer_UseIndexerWithArguments_ReturnsLocalizedHtmlString()
{ {
// Arrange // Arrange
var applicationEnvironment = new Mock<IApplicationEnvironment>(); var hostingEnvironment = new Mock<IHostingEnvironment>();
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication"); hostingEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
var localizedString = new LocalizedHtmlString("Hello", "Bonjour test"); var localizedString = new LocalizedHtmlString("Hello", "Bonjour test");
@ -99,7 +99,7 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Test
htmlLocalizerFactory.Setup( htmlLocalizerFactory.Setup(
h => h.Create("TestApplication.example", "TestApplication")).Returns(htmlLocalizer.Object); h => h.Create("TestApplication.example", "TestApplication")).Returns(htmlLocalizer.Object);
var viewLocalizer = new ViewLocalizer(htmlLocalizerFactory.Object, applicationEnvironment.Object); var viewLocalizer = new ViewLocalizer(htmlLocalizerFactory.Object, hostingEnvironment.Object);
var view = new Mock<IView>(); var view = new Mock<IView>();
view.Setup(v => v.Path).Returns("example"); view.Setup(v => v.Path).Returns("example");
@ -121,9 +121,9 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Test
// Arrange // Arrange
var stringLocalizer = new TestStringLocalizer(); var stringLocalizer = new TestStringLocalizer();
var htmlLocalizer = new HtmlLocalizer(stringLocalizer); var htmlLocalizer = new HtmlLocalizer(stringLocalizer);
var applicationEnvironment = new Mock<IApplicationEnvironment>(); var hostingEnvironment = new Mock<IHostingEnvironment>();
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication"); hostingEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object); var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), hostingEnvironment.Object);
var view = new Mock<IView>(); var view = new Mock<IView>();
view.Setup(v => v.Path).Returns("example"); view.Setup(v => v.Path).Returns("example");
@ -146,9 +146,9 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Test
// Arrange // Arrange
var stringLocalizer = new TestStringLocalizer(); var stringLocalizer = new TestStringLocalizer();
var htmlLocalizer = new HtmlLocalizer(stringLocalizer); var htmlLocalizer = new HtmlLocalizer(stringLocalizer);
var applicationEnvironment = new Mock<IApplicationEnvironment>(); var hostingEnvironment = new Mock<IHostingEnvironment>();
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication"); hostingEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object); var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), hostingEnvironment.Object);
var view = new Mock<IView>(); var view = new Mock<IView>();
view.Setup(v => v.Path).Returns("example"); view.Setup(v => v.Path).Returns("example");
@ -172,9 +172,9 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Test
// Arrange // Arrange
var stringLocalizer = new TestStringLocalizer(); var stringLocalizer = new TestStringLocalizer();
var htmlLocalizer = new HtmlLocalizer(stringLocalizer); var htmlLocalizer = new HtmlLocalizer(stringLocalizer);
var applicationEnvironment = new Mock<IApplicationEnvironment>(); var hostingEnvironment = new Mock<IHostingEnvironment>();
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication"); hostingEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object); var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), hostingEnvironment.Object);
var view = new Mock<IView>(); var view = new Mock<IView>();
view.Setup(v => v.Path).Returns("example"); view.Setup(v => v.Path).Returns("example");
@ -196,9 +196,9 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Test
// Arrange // Arrange
var stringLocalizer = new TestStringLocalizer(); var stringLocalizer = new TestStringLocalizer();
var htmlLocalizer = new HtmlLocalizer(stringLocalizer); var htmlLocalizer = new HtmlLocalizer(stringLocalizer);
var applicationEnvironment = new Mock<IApplicationEnvironment>(); var hostingEnvironment = new Mock<IHostingEnvironment>();
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication"); hostingEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object); var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), hostingEnvironment.Object);
var view = new Mock<IView>(); var view = new Mock<IView>();
view.Setup(v => v.Path).Returns("example"); view.Setup(v => v.Path).Returns("example");
@ -220,9 +220,9 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Test
// Arrange // Arrange
var stringLocalizer = new TestStringLocalizer(); var stringLocalizer = new TestStringLocalizer();
var htmlLocalizer = new HtmlLocalizer(stringLocalizer); var htmlLocalizer = new HtmlLocalizer(stringLocalizer);
var applicationEnvironment = new Mock<IApplicationEnvironment>(); var hostingEnvironment = new Mock<IHostingEnvironment>();
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication"); hostingEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object); var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), hostingEnvironment.Object);
var view = new Mock<IView>(); var view = new Mock<IView>();
view.Setup(v => v.Path).Returns("example"); view.Setup(v => v.Path).Returns("example");
@ -244,9 +244,9 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Test
// Arrange // Arrange
var stringLocalizer = new TestStringLocalizer(); var stringLocalizer = new TestStringLocalizer();
var htmlLocalizer = new HtmlLocalizer(stringLocalizer); var htmlLocalizer = new HtmlLocalizer(stringLocalizer);
var applicationEnvironment = new Mock<IApplicationEnvironment>(); var hostingEnvironment = new Mock<IHostingEnvironment>();
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication"); hostingEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object); var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), hostingEnvironment.Object);
var view = new Mock<IView>(); var view = new Mock<IView>();
view.Setup(v => v.Path).Returns("example"); view.Setup(v => v.Path).Returns("example");
@ -268,9 +268,9 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Test
// Arrange // Arrange
var stringLocalizer = new TestStringLocalizer(); var stringLocalizer = new TestStringLocalizer();
var htmlLocalizer = new HtmlLocalizer(stringLocalizer); var htmlLocalizer = new HtmlLocalizer(stringLocalizer);
var applicationEnvironment = new Mock<IApplicationEnvironment>(); var hostingEnvironment = new Mock<IHostingEnvironment>();
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication"); hostingEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object); var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), hostingEnvironment.Object);
var view = new Mock<IView>(); var view = new Mock<IView>();
view.Setup(v => v.Path).Returns("example"); view.Setup(v => v.Path).Returns("example");

View File

@ -23,7 +23,6 @@ using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.PlatformAbstractions;
using Microsoft.Extensions.Primitives; using Microsoft.Extensions.Primitives;
using Microsoft.Extensions.WebEncoders.Testing; using Microsoft.Extensions.WebEncoders.Testing;
using Moq; using Moq;
@ -1034,13 +1033,6 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
return hostingEnvironment.Object; return hostingEnvironment.Object;
} }
private static IApplicationEnvironment MakeApplicationEnvironment(string applicationName = "testApplication")
{
var applicationEnvironment = new Mock<IApplicationEnvironment>();
applicationEnvironment.Setup(a => a.ApplicationName).Returns(applicationName);
return applicationEnvironment.Object;
}
private static IMemoryCache MakeCache() => new MemoryCache(new MemoryCacheOptions()); private static IMemoryCache MakeCache() => new MemoryCache(new MemoryCacheOptions());
private static IUrlHelperFactory MakeUrlHelperFactory() private static IUrlHelperFactory MakeUrlHelperFactory()

View File

@ -971,13 +971,6 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
return hostingEnvironment.Object; return hostingEnvironment.Object;
} }
private static IApplicationEnvironment MakeApplicationEnvironment(string applicationName = "testApplication")
{
var applicationEnvironment = new Mock<IApplicationEnvironment>();
applicationEnvironment.Setup(a => a.ApplicationName).Returns(applicationName);
return applicationEnvironment.Object;
}
private static IMemoryCache MakeCache() => new MemoryCache(new MemoryCacheOptions()); private static IMemoryCache MakeCache() => new MemoryCache(new MemoryCacheOptions());
private static IUrlHelperFactory MakeUrlHelperFactory() private static IUrlHelperFactory MakeUrlHelperFactory()

View File

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System; using System;
using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Threading; using System.Threading;
@ -18,9 +17,9 @@ using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
using Microsoft.AspNetCore.Mvc.Razor; using Microsoft.AspNetCore.Mvc.Razor;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Microsoft.Extensions.PlatformAbstractions;
using Moq; using Moq;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using Xunit; using Xunit;
@ -247,17 +246,14 @@ namespace Microsoft.AspNetCore.Mvc
private static void AddViewEngineOptionsServices(IServiceCollection serviceCollection) private static void AddViewEngineOptionsServices(IServiceCollection serviceCollection)
{ {
serviceCollection.AddSingleton(Mock.Of<IHostingEnvironment>()); var hostingEnvironment = new Mock<IHostingEnvironment>();
var applicationEnvironment = new Mock<IApplicationEnvironment>(); hostingEnvironment.SetupGet(e => e.ApplicationName)
applicationEnvironment.SetupGet(e => e.ApplicationName)
.Returns(typeof(MvcOptionsSetupTest).GetTypeInfo().Assembly.GetName().Name); .Returns(typeof(MvcOptionsSetupTest).GetTypeInfo().Assembly.GetName().Name);
// ApplicationBasePath is used to set up a PhysicalFileProvider which requires hostingEnvironment.SetupGet(e => e.ContentRootFileProvider)
// a real directory. .Returns(Mock.Of<IFileProvider>());
applicationEnvironment.SetupGet(e => e.ApplicationBasePath)
.Returns(Directory.GetCurrentDirectory());
serviceCollection.AddSingleton(applicationEnvironment.Object); serviceCollection.AddSingleton(hostingEnvironment.Object);
} }
} }
} }

View File

@ -19,20 +19,20 @@ namespace Microsoft.AspNetCore.Mvc
{ {
// Arrange // Arrange
var options = new RazorViewEngineOptions(); var options = new RazorViewEngineOptions();
var appEnv = new Mock<IApplicationEnvironment>(); var expected = Mock.Of<IFileProvider>();
appEnv.SetupGet(e => e.ApplicationBasePath)
.Returns(Directory.GetCurrentDirectory());
var hostingEnv = new Mock<IHostingEnvironment>(); var hostingEnv = new Mock<IHostingEnvironment>();
hostingEnv.SetupGet(e => e.ContentRootFileProvider)
.Returns(expected);
hostingEnv.SetupGet(e => e.EnvironmentName) hostingEnv.SetupGet(e => e.EnvironmentName)
.Returns("Development"); .Returns("Development");
var optionsSetup = new RazorViewEngineOptionsSetup(appEnv.Object, hostingEnv.Object); var optionsSetup = new RazorViewEngineOptionsSetup(hostingEnv.Object);
// Act // Act
optionsSetup.Configure(options); optionsSetup.Configure(options);
// Assert // Assert
var fileProvider = Assert.Single(options.FileProviders); var fileProvider = Assert.Single(options.FileProviders);
Assert.IsType<PhysicalFileProvider>(fileProvider); Assert.Same(expected, fileProvider);
} }
[Theory] [Theory]
@ -43,13 +43,10 @@ namespace Microsoft.AspNetCore.Mvc
{ {
// Arrange // Arrange
var options = new RazorViewEngineOptions(); var options = new RazorViewEngineOptions();
var appEnv = new Mock<IApplicationEnvironment>();
appEnv.SetupGet(e => e.ApplicationBasePath)
.Returns(Directory.GetCurrentDirectory());
var hostingEnv = new Mock<IHostingEnvironment>(); var hostingEnv = new Mock<IHostingEnvironment>();
hostingEnv.SetupGet(e => e.EnvironmentName) hostingEnv.SetupGet(e => e.EnvironmentName)
.Returns(environment); .Returns(environment);
var optionsSetup = new RazorViewEngineOptionsSetup(appEnv.Object, hostingEnv.Object); var optionsSetup = new RazorViewEngineOptionsSetup(hostingEnv.Object);
// Act // Act
optionsSetup.Configure(options); optionsSetup.Configure(options);
@ -68,13 +65,10 @@ namespace Microsoft.AspNetCore.Mvc
{ {
// Arrange // Arrange
var options = new RazorViewEngineOptions(); var options = new RazorViewEngineOptions();
var appEnv = new Mock<IApplicationEnvironment>();
appEnv.SetupGet(e => e.ApplicationBasePath)
.Returns(Directory.GetCurrentDirectory());
var hostingEnv = new Mock<IHostingEnvironment>(); var hostingEnv = new Mock<IHostingEnvironment>();
hostingEnv.SetupGet(e => e.EnvironmentName) hostingEnv.SetupGet(e => e.EnvironmentName)
.Returns(environment); .Returns(environment);
var optionsSetup = new RazorViewEngineOptionsSetup(appEnv.Object, hostingEnv.Object); var optionsSetup = new RazorViewEngineOptionsSetup(hostingEnv.Object);
// Act // Act
optionsSetup.Configure(options); optionsSetup.Configure(options);

View File

@ -3,29 +3,29 @@
using System.IO; using System.IO;
using System.Text; using System.Text;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.PlatformAbstractions;
namespace FilesWebSite namespace FilesWebSite
{ {
public class DownloadFilesController : Controller public class DownloadFilesController : Controller
{ {
private readonly IApplicationEnvironment _appEnvironment; private readonly IHostingEnvironment _hostingEnvironment;
public DownloadFilesController(IApplicationEnvironment appEnvironment) public DownloadFilesController(IHostingEnvironment hostingEnvironment)
{ {
_appEnvironment = appEnvironment; _hostingEnvironment = hostingEnvironment;
} }
public IActionResult DowloadFromDisk() public IActionResult DowloadFromDisk()
{ {
var path = Path.Combine(_appEnvironment.ApplicationBasePath, "sample.txt"); var path = Path.Combine(_hostingEnvironment.ContentRootPath, "sample.txt");
return PhysicalFile(path, "text/plain"); return PhysicalFile(path, "text/plain");
} }
public IActionResult DowloadFromDiskWithFileName() public IActionResult DowloadFromDiskWithFileName()
{ {
var path = Path.Combine(_appEnvironment.ApplicationBasePath, "sample.txt"); var path = Path.Combine(_hostingEnvironment.ContentRootPath, "sample.txt");
return PhysicalFile(path, "text/plain", "downloadName.txt"); return PhysicalFile(path, "text/plain", "downloadName.txt");
} }