diff --git a/src/Microsoft.AspNetCore.Hosting/Internal/ApplicationDiscriminator.cs b/src/Microsoft.AspNetCore.Hosting/Internal/ApplicationDiscriminator.cs new file mode 100644 index 00000000..c269f7d6 --- /dev/null +++ b/src/Microsoft.AspNetCore.Hosting/Internal/ApplicationDiscriminator.cs @@ -0,0 +1,25 @@ +// 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 Microsoft.AspNetCore.DataProtection.Infrastructure; + +namespace Microsoft.AspNetCore.Hosting.Internal +{ + public class ApplicationDiscriminator : IApplicationDiscriminator + { + private readonly IHostingEnvironment _hostingEnvironment; + + public ApplicationDiscriminator(IHostingEnvironment hostingEnvironment) + { + if (hostingEnvironment == null) + { + throw new ArgumentNullException(nameof(hostingEnvironment)); + } + + _hostingEnvironment = hostingEnvironment; + } + + public string Discriminator => _hostingEnvironment.ContentRootPath; + } +} \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Hosting/Microsoft.AspNetCore.Hosting.csproj b/src/Microsoft.AspNetCore.Hosting/Microsoft.AspNetCore.Hosting.csproj index da224eb1..73800436 100644 --- a/src/Microsoft.AspNetCore.Hosting/Microsoft.AspNetCore.Hosting.csproj +++ b/src/Microsoft.AspNetCore.Hosting/Microsoft.AspNetCore.Hosting.csproj @@ -17,6 +17,7 @@ + diff --git a/src/Microsoft.AspNetCore.Hosting/WebHostBuilder.cs b/src/Microsoft.AspNetCore.Hosting/WebHostBuilder.cs index fb922a0f..5bd5ba6a 100644 --- a/src/Microsoft.AspNetCore.Hosting/WebHostBuilder.cs +++ b/src/Microsoft.AspNetCore.Hosting/WebHostBuilder.cs @@ -7,6 +7,7 @@ using System.IO; using System.Reflection; using System.Runtime.ExceptionServices; +using Microsoft.AspNetCore.DataProtection.Infrastructure; using Microsoft.AspNetCore.Hosting.Builder; using Microsoft.AspNetCore.Hosting.Internal; using Microsoft.AspNetCore.Http; @@ -303,6 +304,7 @@ private IServiceCollection BuildCommonServices(out AggregateException hostingSta var services = new ServiceCollection(); services.AddSingleton(_hostingEnvironment); services.AddSingleton(_context); + services.AddTransient(); var builder = new ConfigurationBuilder() .SetBasePath(_hostingEnvironment.ContentRootPath) diff --git a/test/Microsoft.AspNetCore.Hosting.Tests/WebHostBuilderTests.cs b/test/Microsoft.AspNetCore.Hosting.Tests/WebHostBuilderTests.cs index d6554024..0853f750 100644 --- a/test/Microsoft.AspNetCore.Hosting.Tests/WebHostBuilderTests.cs +++ b/test/Microsoft.AspNetCore.Hosting.Tests/WebHostBuilderTests.cs @@ -9,6 +9,7 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.DataProtection.Infrastructure; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting.Fakes; using Microsoft.AspNetCore.Hosting.Internal; @@ -987,6 +988,19 @@ public void Build_ThrowsIfUnloadableAssemblyNameInHostingStartupAssemblies() Assert.IsType(ex.InnerExceptions[0].InnerException); } + [Fact] + public void Build_SetsAppDescriminatorFromContentRoot() + { + var builder = CreateWebHostBuilder() + .UseContentRoot(Environment.CurrentDirectory) + .Configure(app => { }) + .UseServer(new TestServer()); + + var host = builder.Build(); + var applicationDiscriminator = host.Services.GetRequiredService(); + Assert.Equal(Environment.CurrentDirectory, applicationDiscriminator.Discriminator); + } + [Fact] public async Task Build_DoesNotThrowIfUnloadableAssemblyNameInHostingStartupAssembliesAndCaptureStartupErrorsTrue() {