使用 class 的方法不在启动时注入?

Use method of class without injecting in startup?

我有一个将生成令牌的服务 ITokenService。我在我的启动中配置了这个服务,如:

services.AddSingleton<ITokenService, TokenService>();

现在我正在注入另一个需要此令牌进行初始化的自定义提供程序

services.AddScoped<IManagementApiClient>(provider => new ManagementApiClient("token", "YOUR_AUTH0_DOMAIN"));

现在我想将从 ITokenService 生成的令牌传递给 ManagementApiClient 初始化中使用的令牌。有没有办法通过创建另一个自定义提供程序或做其他事情来做到这一点。

我已遵循此 link https://github.com/auth0/auth0.net/issues/179 但不明白我该怎么做。有帮助吗?

您可以在实现工厂委托中从 IServiceProvider 解析 ITokenService

services.AddScoped<IManagementApiClient>(provider => 
    new ManagementApiClient(provider.GetRequiredService<ITokenService>().GetToken(), "YOUR_AUTH0_DOMAIN"));

不过我想知道,为什么您需要一个特定的 ITokenService?从配置中检索值还不够吗?例如:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    private IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddScoped<IManagementApiClient>(new ManagementApiClient(Configuration["Auth0:Token"], Configuration["Auth0:Domain"]);

        // ...
    }
}

您可以在 appsettings.json 中指定这些设置:

{
  "Auth0": {
    "Domain": "your.domain.auth0.com",
    "Token": "your token"
  }
}