доступ к опциям промежуточного программного обеспечения при вызове - PullRequest
0 голосов
/ 03 декабря 2018

Я создаю пользовательский элемент промежуточного программного обеспечения, но не могу понять, как передать объект Options промежуточному программному обеспечению и получить к нему доступ в методе Invoke.

Config :

public class MiddleConfig
{
    private readonly ICollection<string> _c;

    public MiddleConfig()
    {
        _c = new Collection<string>();
    }

    public void AddPath(string path)
    {
        _c.Add(path);
    }

    public IEnumerable<string> Paths => _c;
}

MiddleConfig :

public class Middle
{
    private readonly RequestDelegate _next;
    private readonly MiddleConfig _opt = new MiddleConfig();

    public Middle(RequestDelegate next, MiddleConfig options)
    {
        _opt = options;
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        await _next.Invoke(context);
    }
}

Расширение :

public static IServiceCollection AddLCPathControl(this IServiceCollection services, Action<MiddleConfig> options)
{
    MiddleConfig opt = new MiddleConfig();
    options.Invoke(opt);

    return services.AddScoped<Middle>();
}

1 Ответ

0 голосов
/ 03 декабря 2018

Оказывается, я использовал неправильный метод для добавления промежуточного программного обеспечения.

Изменен для добавления промежуточного программного обеспечения в ApplicationBuilder и использования UseMiddleware <> (), который не может принимать параметры так, как я хотел.

Добавочный номер :

public static class IServiceCollectionExtension
{
    public static IApplicationBuilder UseLCPathControl(this IApplicationBuilder services, string path)
    {
        return services.UseLCPathControl(o => o.AddPath(path));
    }

    public static IApplicationBuilder UseLCPathControl(this IApplicationBuilder builder, Action<MiddleConfig> options)
    {
        MiddleConfig opt = new MiddleConfig();
        options.Invoke(opt);

        return builder.UseMiddleware<Middle>(opt);
    }
}

Средний :

public class Middle
{
    private readonly RequestDelegate _next;
    private readonly MiddleConfig _opt = new MiddleConfig();

    public Middle(RequestDelegate next, MiddleConfig options)
    {
        _opt = options;
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        await _next.Invoke(context);
    }
}

MiddleConfig :

public class MiddleConfig
{
    private readonly ICollection<string> _c;

    public MiddleConfig()
    {
        _c = new Collection<string>();
    }

    public void AddPath(string path)
    {
        _c.Add(path);
    }

    public IEnumerable<string> Paths => _c;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...