使用Azure密钥保管库中的依赖项注入获取AddDbContextFactory的连接字符串

uidvcgyl  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(102)

我正在尝试为我的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的方法?在这种情况下,最佳实践是什么?

ozxc1zmp

ozxc1zmp1#

大多数情况下,如果我发现自己试图将GetRequiredService作为ConfigureServices的一部分使用,有一种更好的方法来做事情。通常,在设置DI时,您不希望调用DI服务。
我建议从KeyVault获取值作为部署的一部分,并将其作为应用程序设置引用,有关如何操作的详细信息,请参见this documentation

相关问题