From 718d923c7dd1d1039fba3a5d987793226de117b7 Mon Sep 17 00:00:00 2001 From: Praburaj Date: Wed, 4 Mar 2015 15:48:31 -0800 Subject: [PATCH] Adding IApplicationLifetime to the manifest Since IApplicationLifetime is not added to the manifest, while calling HostingServices.Create() before invoking ConfigureServices() we end up creating a new instance of IApplicationLifetime. So the Cancellationtoken that hosting triggers on appshutdown is different from what the app is exposed. --- src/Microsoft.AspNet.Hosting/HostingServices.cs | 9 +++++++-- .../UseRequestServicesFacts.cs | 14 ++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/Microsoft.AspNet.Hosting/HostingServices.cs b/src/Microsoft.AspNet.Hosting/HostingServices.cs index 46b0f94703..1a5ac71846 100644 --- a/src/Microsoft.AspNet.Hosting/HostingServices.cs +++ b/src/Microsoft.AspNet.Hosting/HostingServices.cs @@ -45,8 +45,13 @@ namespace Microsoft.AspNet.Hosting public HostingManifest(IServiceProvider fallback) { var manifest = fallback.GetRequiredService(); - Services = new Type[] { typeof(ITypeActivator), typeof(IHostingEnvironment), typeof(ILoggerFactory), typeof(IHttpContextAccessor) } - .Concat(manifest.Services).Distinct(); + Services = new Type[] { + typeof(ITypeActivator), + typeof(IHostingEnvironment), + typeof(ILoggerFactory), + typeof(IHttpContextAccessor), + typeof(IApplicationLifetime) + }.Concat(manifest.Services).Distinct(); } public IEnumerable Services { get; private set; } diff --git a/test/Microsoft.AspNet.Hosting.Tests/UseRequestServicesFacts.cs b/test/Microsoft.AspNet.Hosting.Tests/UseRequestServicesFacts.cs index 44cd34f8f9..10859e7323 100644 --- a/test/Microsoft.AspNet.Hosting.Tests/UseRequestServicesFacts.cs +++ b/test/Microsoft.AspNet.Hosting.Tests/UseRequestServicesFacts.cs @@ -3,8 +3,6 @@ using System; using Microsoft.AspNet.Builder; -using Microsoft.AspNet.Hosting.Builder; -using Microsoft.AspNet.Hosting.Server; using Microsoft.AspNet.Http.Core; using Microsoft.AspNet.RequestContainer; using Microsoft.Framework.DependencyInjection; @@ -81,14 +79,11 @@ namespace Microsoft.AspNet.Hosting.Tests } [Theory] - [InlineData(typeof(IHostingEngine))] - [InlineData(typeof(IServerLoader))] - [InlineData(typeof(IApplicationBuilderFactory))] - [InlineData(typeof(IHttpContextFactory))] [InlineData(typeof(ITypeActivator))] - [InlineData(typeof(IApplicationLifetime))] + [InlineData(typeof(IHostingEnvironment))] [InlineData(typeof(ILoggerFactory))] [InlineData(typeof(IHttpContextAccessor))] + [InlineData(typeof(IApplicationLifetime))] public void UseRequestServicesHostingImportedServicesAreDefined(Type service) { var baseServiceProvider = HostingServices.Create().BuildServiceProvider(); @@ -96,7 +91,10 @@ namespace Microsoft.AspNet.Hosting.Tests builder.UseRequestServices(); - Assert.NotNull(builder.ApplicationServices.GetRequiredService(service)); + var fromAppServices = builder.ApplicationServices.GetRequiredService(service); + + Assert.NotNull(fromAppServices); + Assert.Equal(baseServiceProvider.GetRequiredService(service), fromAppServices); } } } \ No newline at end of file