Использовать метод класса без инъекций при запуске? - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть сервис 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 голосов
/ 07 сентября 2018

Вы можете разрешить 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"
  }
}
...