如何从程序 .cs 或绑定调用 GetService

How to invoke GetService from program.cs or bindings

提问人:Master 提问时间:11/15/2023 最后编辑:StevenMaster 更新时间:11/15/2023 访问量:37

问:

我目前注入了我的类依赖关系。我使用这个类来获取存储在 AWS 中的密钥。ISecretManager

我可以使用机密来创建更多的依赖注入

Services.AddScoped<IDbContext>(
    x => new DbContext(
        Context.Configuration,
        x.GetService<ISecretManager>().Get("DB")))

现在我陷入了困境。我需要启用Redis缓存,但该值存储在机密中。

Services.AddStackExchangeRedisCache(options =>
{
    //secret value goes here
    options.Configuration = // GetService<ISecretManager>().Get("REDIS")
});

如何获取服务调用,以便填充 Redis 连接字符串?我也可以在我的 ASP.NET Core Web 应用程序的程序.cs中实现这一点吗?ISecretManager

C# ASP.NET-Core 依赖项注入

评论

0赞 Panagiotis Kanavos 11/15/2023
builder.Configuration.GetConnectionString(...)或者你真的使用 .NET的用户密钥builder.Configuration["Section:Secret"]
1赞 Steven 11/15/2023
请展示您如何配置并显示其构造函数。最好是用一个最小的可重现的例子来回答你的问题。ISecretManager
0赞 Panagiotis Kanavos 11/15/2023
请发布完整的代码。目前尚不清楚您使用的是 Minimal API 还是旧式 Startup 类。在所有这些中,您都可以访问配置设置。您可以使用不同的配置源来提供这些配置设置,而不是检索受保护的配置设置的自定义项。ISecretManager

答:

1赞 Qiang Fu 11/15/2023 #1
var value = Services.BuildServiceProvider().GetService<ISecretManager>().Get("REDIS");
Services.AddStackExchangeRedisCache(options => {
    options.Configuration = value;
});

评论

1赞 Master 11/16/2023
谢谢你,正是我想要的。