在不注入启动的情况下使用类的方法?

时间:2018-09-07 07:42:04

标签: asp.net-core asp.net-core-2.0 auth0

我有一个将生成令牌的服务ITokenService。我已经在启动时配置了此服务,例如:

services.AddSingleton<ITokenService, TokenService>();

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

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

现在,我想将ITokenService生成的令牌传递给ManagementApiClient初始化中使用的令牌。是否可以通过创建另一个自定义提供程序或执行其他操作来做到这一点。

我已经点击了此链接https://github.com/auth0/auth0.net/issues/179,但不知道该怎么做。有帮助吗?

1 个答案:

答案 0 :(得分:1)

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

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"
  }
}