Регистрация настраиваемого класса с параметром HTTPContextAccessor И другой параметр не компилируется - PullRequest
0 голосов
/ 10 июля 2020

В соответствии с этим он должен автоматически проходить в IHttpContextAccessor при разрешении зависимости: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-context?view=aspnetcore-3.1

У меня это в моем классе Startup:

public class Startup
{
    public IConfiguration _configuration { get; }

    public Startup(IConfiguration configuration)
    {
        _configuration = configuration;

    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSession();
        services.AddSingleton<IConfiguration>(_configuration);

        services.AddHttpContextAccessor();
        services.AddSingleton<IServerConnectionHelper>(new ServerConnectionHelper(_configuration));

Вот как мой ServerConnectionHelper пытается получить HttpContextAccessor:

    public class ServerConnectionHelper : IServerConnectionHelper
{
    IConfiguration _configuration;
    private readonly HttpContext _httpContext;

    public ServerConnectionHelper(IConfiguration configuration, IHttpContextAccessor httpContextAccessor)
    {
        _configuration = configuration;
        _httpContext = httpContextAccessor?.HttpContext;
    }

Теперь я понимаю, почему он жалуется на «Нет аргумента, соответствующего обязательному формальному параметру httpContentAccessor, но в Пример от Microsoft также не имеет его.

Пример Microsoft показывает, что он использует AddTransient, но когда я пытаюсь переключиться на него, я не могу понять, как передать контекст в регистрацию для моего ServerConnectionHelper класс.

Есть какие-нибудь эксперты по DI?

1 Ответ

0 голосов
/ 10 июля 2020

Как обычно разбираюсь сразу после того, как задаю вопрос. Вот почему я пришел сюда!

services.AddSingleton (new ServerConnectionHelper (_configuration));

должны быть услугами.AddTransient ();

Как обычно, я слишком усложнял себе жизнь

...