我正在尝试为我的ihostedservice应用设置服务注册,并希望拉入位于密钥保管库中的连接字符串。
using IHost host = Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(app =>
{
app.AddJsonFile("appsettings.json");
})
.ConfigureServices((hostContext, services) =>
{
services.AddSingleton<SecretClient>(serviceProvider =>
{
// Set up Key Vault
});
services.AddDbContextFactory<MyContext>(opt =>
{
var sp = service.BuildServiceProvider();
var secretClient = sp.GetRequiredService<SecretClient>();
var serviceNames = sp.GetRequiredService<IOptionsMonitor<ServiceNames>>();
var secretName = serviceNames.CurrentValue.Secret;
KeyVaultSecret secret = secretClient.GetSecret(secretName);
opt.UseSqlServer(secret.Value);
};
})
.Build();
在网上阅读时,我发现一些东西提到我应该牢记构建一个服务提供者。有没有更好的注册dbContextFactory的方法?在这种情况下,最佳实践是什么?
1条答案
按热度按时间ozxc1zmp1#
大多数情况下,如果我发现自己试图将
GetRequiredService
作为ConfigureServices
的一部分使用,有一种更好的方法来做事情。通常,在设置DI时,您不希望调用DI服务。我建议从KeyVault获取值作为部署的一部分,并将其作为应用程序设置引用,有关如何操作的详细信息,请参见this documentation。