From 930c1de8b00e6cd19760cd0d24c532a562c8175a Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 8 Dec 2022 18:17:18 +0800 Subject: [PATCH] Try to set environment after `ConfigureServices` method executes. --- .../Volo/Abp/AbpApplicationBase.cs | 22 +++++++----- .../AspNetCore/AbpHostEnvironment_Tests.cs | 34 +++++++++++++++++++ 2 files changed, 47 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs b/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs index 51f0615838..609b880566 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs @@ -66,15 +66,6 @@ public abstract class AbpApplicationBase : IAbpApplication { ConfigureServices(); } - - if (options.Environment.IsNullOrWhiteSpace()) - { - var abpHostEnvironment = services.GetSingletonInstance(); - if (abpHostEnvironment.EnvironmentName.IsNullOrWhiteSpace()) - { - abpHostEnvironment.EnvironmentName = Environments.Production; - } - } } public virtual async Task ShutdownAsync() @@ -238,6 +229,8 @@ public abstract class AbpApplicationBase : IAbpApplication } _configuredServices = true; + + TryToSetEnvironment(Services); } private void CheckMultipleConfigureServices() @@ -327,6 +320,8 @@ public abstract class AbpApplicationBase : IAbpApplication } _configuredServices = true; + + TryToSetEnvironment(Services); } private static string GetApplicationName(AbpApplicationCreationOptions options) @@ -354,4 +349,13 @@ public abstract class AbpApplicationBase : IAbpApplication return null; } + + private static void TryToSetEnvironment(IServiceCollection services) + { + var abpHostEnvironment = services.GetSingletonInstance(); + if (abpHostEnvironment.EnvironmentName.IsNullOrWhiteSpace()) + { + abpHostEnvironment.EnvironmentName = Environments.Production; + } + } } diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpHostEnvironment_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpHostEnvironment_Tests.cs index 42f8a43cc6..16799162bb 100644 --- a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpHostEnvironment_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpHostEnvironment_Tests.cs @@ -1,5 +1,8 @@ using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration.Memory; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Shouldly; using Xunit; @@ -29,3 +32,34 @@ public class AbpHostEnvironment_Tests : AbpAspNetCoreTestBase abpHostEnvironment.EnvironmentName.ShouldBe(Environments.Staging); } } + +public class AbpHostEnvironment_Async_Initialize_Tests +{ + [Fact] + public async Task Should_Set_Environment_From_AspNetCore() + { + var builder = WebApplication.CreateBuilder(new WebApplicationOptions + { + EnvironmentName = Environments.Staging + }); + builder.Host.UseAutofac(); + await builder.AddApplicationAsync(); + var app = builder.Build(); + await app.InitializeApplicationAsync(); + + var abpHostEnvironment = app.Services.GetRequiredService(); + abpHostEnvironment.EnvironmentName.ShouldBe(Environments.Staging); + + builder = WebApplication.CreateBuilder(new WebApplicationOptions + { + EnvironmentName = Environments.Staging + }); + builder.Host.UseAutofac(); + var abpApp = await AbpApplicationFactory.CreateAsync(builder.Services); + app = builder.Build(); + await app.InitializeApplicationAsync(); + + abpHostEnvironment = abpApp.Services.GetRequiredService(); + abpHostEnvironment.EnvironmentName.ShouldBe(Environments.Staging); + } +}