Asp.net Core: проблема преобразования промежуточного ПО в контроллер? - PullRequest
0 голосов
/ 07 января 2019

У меня есть проект Swagger, где я делаю OAuth (провайдер токенов + проверка). Все работает нормально, но поставщик токенов был реализован как промежуточное ПО на основе примера, который я нашел в Интернете. Я хочу преобразовать промежуточное программное обеспечение провайдера токенов в контроллер, чтобы оно отображалось в Swagger, и пользователи перестали мне задавать вопросы о том, как получить токен:).

В файле startup.cs я создал объект TokenProviderOptions и заполнил его значениями, которые находятся в файле startup.cs (поскольку они также передаются в часть проверки oauth). Я тогда делал:

app.UseMiddleware<TokenProviderMiddleware>(Options.Create(tokenProviderOptions));

и промежуточное ПО получало опции.

Теперь, когда я избавляюсь от промежуточного программного обеспечения, как я могу передать опции tokenProvider контроллеру? Кажется странным помещать его в DI как синглтон.

1 Ответ

0 голосов
/ 07 января 2019

Вы можете разрешить параметры из контейнера внедрения зависимостей в контроллерах и других службах, используя интерфейс IOptions<T>. Например:

public class TokenProviderController
{
    private readonly IOptions<TokenProviderOptions> _options;

    public TokenProviderController(IOptions<TokenProviderOptions> options)
    {
        _options = options;
    }
}

Затем вы можете получить доступ к значениям параметров, используя _options.Value.

Опции можно настроить в классе запуска. Обычно вы заполняете их из конфигурации:

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

    private IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<TokenProviderOptions>(Configuration);
    }

    // ...
}

Если ваши параметры состоят из жестко заданных значений, вы можете использовать делегата для настройки привязки:

services.Configure<TokenProviderOptions>(o =>
{
    o.Foo = "Bar";
});

Для получения дополнительной информации ознакомьтесь с документацией по шаблону параметров .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...