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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -5,11 +5,11 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.Extensions.DependencyModel;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.PlatformAbstractions;
namespace Microsoft.AspNetCore.Mvc.Razor.Internal
{
@ -22,14 +22,14 @@ namespace Microsoft.AspNetCore.Mvc.Razor.Internal
/// <summary>
/// Initializes a new instance of <see cref="DependencyContextRazorViewEngineOptionsSetup"/>.
/// </summary>
public DependencyContextRazorViewEngineOptionsSetup(IApplicationEnvironment applicationEnvironment)
: base(options => ConfigureRazor(options, applicationEnvironment))
public DependencyContextRazorViewEngineOptionsSetup(IHostingEnvironment hostingEnvironment)
: 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 compilationOptions = dependencyContext?.CompilationOptions ?? Extensions.DependencyModel.CompilationOptions.Default;

View File

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

View File

@ -9,9 +9,9 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
{
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<JavaScriptEncoder, JavaScriptTestEncoder>();
services.AddTransient<UrlEncoder, UrlTestEncoder>();

View File

@ -36,7 +36,8 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
using (new CultureReplacer())
{
var builder = new WebHostBuilder()
.ConfigureServices(serviceCollection => InitializeServices(serviceCollection, relativePath))
.UseContentRoot(GetApplicationPath(relativePath))
.ConfigureServices(InitializeServices)
.UseStartup(typeof(TStartup));
_server = new TestServer(builder);
@ -54,14 +55,22 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
_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 applicationName = startupAssembly.GetName().Name;
@ -69,21 +78,8 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
#if DNX451
services.AddSingleton(CompilationServices.Default.LibraryExporter);
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
services.AddSingleton<IApplicationEnvironment>(
new TestApplicationEnvironment(applicationEnvironment, applicationName, applicationRoot));
// Inject a custom assembly provider. Overrides AddMvc() because that uses TryAdd().
var assemblyProvider = new StaticAssemblyProvider();
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.
using System.Globalization;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.PlatformAbstractions;
@ -39,9 +40,6 @@ namespace Microsoft.AspNetCore.Mvc.Localization.Test
public void HtmlLocalizerOfTTest_UseIndexerWithArguments_ReturnsLocalizedHtmlString()
{
// Arrange
var applicationEnvironment = new Mock<IApplicationEnvironment>();
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
var localizedString = new LocalizedHtmlString("Hello", "Bonjour test");
var htmlLocalizer = new Mock<IHtmlLocalizer>();

View File

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

View File

@ -23,7 +23,6 @@ using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.PlatformAbstractions;
using Microsoft.Extensions.Primitives;
using Microsoft.Extensions.WebEncoders.Testing;
using Moq;
@ -1034,13 +1033,6 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
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 IUrlHelperFactory MakeUrlHelperFactory()

View File

@ -971,13 +971,6 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
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 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.
using System;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading;
@ -18,9 +17,9 @@ using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
using Microsoft.AspNetCore.Mvc.Razor;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.PlatformAbstractions;
using Moq;
using Newtonsoft.Json.Linq;
using Xunit;
@ -247,17 +246,14 @@ namespace Microsoft.AspNetCore.Mvc
private static void AddViewEngineOptionsServices(IServiceCollection serviceCollection)
{
serviceCollection.AddSingleton(Mock.Of<IHostingEnvironment>());
var applicationEnvironment = new Mock<IApplicationEnvironment>();
applicationEnvironment.SetupGet(e => e.ApplicationName)
var hostingEnvironment = new Mock<IHostingEnvironment>();
hostingEnvironment.SetupGet(e => e.ApplicationName)
.Returns(typeof(MvcOptionsSetupTest).GetTypeInfo().Assembly.GetName().Name);
// ApplicationBasePath is used to set up a PhysicalFileProvider which requires
// a real directory.
applicationEnvironment.SetupGet(e => e.ApplicationBasePath)
.Returns(Directory.GetCurrentDirectory());
hostingEnvironment.SetupGet(e => e.ContentRootFileProvider)
.Returns(Mock.Of<IFileProvider>());
serviceCollection.AddSingleton(applicationEnvironment.Object);
serviceCollection.AddSingleton(hostingEnvironment.Object);
}
}
}

View File

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

View File

@ -3,29 +3,29 @@
using System.IO;
using System.Text;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.PlatformAbstractions;
namespace FilesWebSite
{
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()
{
var path = Path.Combine(_appEnvironment.ApplicationBasePath, "sample.txt");
var path = Path.Combine(_hostingEnvironment.ContentRootPath, "sample.txt");
return PhysicalFile(path, "text/plain");
}
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");
}