Условная операция Processor в NSwag - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь условно добавить OperationProcessor в NSwag. Например, DefaultApiValueOperationProcessor следует добавлять / включать только тогда, когда мы находимся в среде разработки (env.IsDevelopment)

К сожалению, я не могу получить IHostingEnvironment в ConfigureServices, а также могу ' OperationProcessors на Configure можно получить у Сваггера, см. пример кода в строках комментария:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSwaggerDocument(s =>
        {
            // can't get IHostingEnvironment here? (for env.IsDevelopment())

            s.OperationProcessors.Add(new DefaultApiValueOperationProcessor("version", "1"));
        });
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        // can't get Swagger's OperationProcessors here?

        app.UseOpenApi();
        app.UseSwaggerUi3(o =>
        {
            o.DocExpansion = "list";
            o.DocumentTitle = "My API";
        });

        app.UseMvc();
    }
}

Есть идеи, как мне это исправить?

1 Ответ

1 голос
/ 18 апреля 2020

Чтобы получить доступ к среде веб-хоста из ConfigureServices, просто добавьте свойство WebHostEnvironment в класс Startup и установите его из конструктора:

public class Startup
{
    private IConfiguration Configuration { get; }
    private IWebHostEnvironment WebHostEnvironment { get; }

    public Startup(IConfiguration configuration, IWebHostEnvironment webHostEnvironment)
    {
        Configuration = configuration;
        WebHostEnvironment = webHostEnvironment;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        if (WebHostEnvironment.IsDevelopment())
        {
            // ...
        }
    }
}

Я также поставил Configuration свойство в этом примере, потому что в любом случае это нужно многим программам.

Обратите внимание, что типом является IWebHostEnvironment, а не IWebHostingEnvironment, потому что последний устарел.

Относительно вашего второго вопроса (как получить доступ к операционному процессору с Configure), не могли бы вы пролить свет на свои намерения? Я понятия не имею, чего вы пытаетесь достичь.

...