使用AbpApplicationFactory.Create会覆盖IConfiguration

使用AbpApplicationFactory.Create会覆盖IConfiguration,abp,Abp,使用Abp运行HostedService时,使用AbpApplicationFactory.Create时,在main方法中创建的IConfiguration将被覆盖 主要方法使用默认的Microsoft实现连接到AzureKeyvault: 公共静态IHostBuilder CreateHostBuilder(字符串[]args)=> Host.CreateDefaultBuilder(args) .ConfigureLogging((上下文,日志)=>logging.ClearProvide

使用Abp运行HostedService时,使用AbpApplicationFactory.Create时,在main方法中创建的IConfiguration将被覆盖

主要方法使用默认的Microsoft实现连接到AzureKeyvault:

公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((上下文,日志)=>logging.ClearProviders())
.ConfigureServices((主机上下文,服务)=>
{
services.AddHostedService();
})
.ConfigureAppConfiguration((上下文,配置)=>
{
if(context.HostingEnvironment.IsProduction())
{
var builconfig=config.Build();
var azureServiceTokenProvider=新azureServiceTokenProvider();
var keyVaultClient=新的keyVaultClient(
新建KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback);
config.AddAzureKeyVault(
$“https://{BuilConfig[“KeyVaultName”]}.vault.azure.net/”,
KeyVault客户端,
新的DefaultKeyVaultSecretManager());
}
})
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup();
});
目前,我正在使用创建abp模块时添加的默认DbMigrator:

公共类DbMigratorHostedService:IHostedService
{
私有只读IHostApplicationLifetime\u hostApplicationLifetime;
公共DbMigratorHostedService(IHostApplicationLifetime hostApplicationLifetime)
{
_hostApplicationLifetime=hostApplicationLifetime;
}
公共异步任务StartAsync(CancellationToken CancellationToken)
{
使用var application=AbpApplicationFactory.Create(选项=>
{
options.UseAutofac();
options.Services.AddLogging(c=>c.AddSerilog());
});
application.Initialize();
等待申请
.服务提供者
.GetRequiredService()
.MigrateAsync();
application.Shutdown();
_hostApplicationLifetime.StopApplication();
}
公共任务StopAsync(CancellationToken CancellationToken)=>Task.CompletedTask;
}
我可以看到AbpApplicationFactory.Create方法也有选项。但是,这没有任何配置。为什么应用程序范围不使用范围外的相同IConfiguration?在范围外,我得到了6个配置提供程序,包括密钥库配置,在范围内,只有2个缺少密钥库配置

我是不是遗漏了什么


我还试图去掉应用程序范围,然后得到正确的配置。但是,我不能在应用程序上调用initialize方法,也不能使用startup类,因为它不是web应用程序。

你说得对。启动模板不是为处理此类情况而设计的。我创建了一个问题来解决它:

现在,您可以使用自定义构建的配置替换配置:

我不想尝试,但这也可能奏效(这正是你想要的):

  • 将IConfiguration注入托管服务
  • 将其传递给ReplaceConfiguration

  • 我为console应用程序启动模板实施了一个更好的解决方案,您可以检查它,并将其应用于您的应用程序,直到发布为止。