Как я могу получить HttpContext внутри абстрактного класса в ASPNETCore - PullRequest
0 голосов
/ 15 января 2020

У меня есть следующий репозиторий:

public class TestRepository : WebCaller<Data>, ITestRepository
    {
        string connString = this.GetConnectionString();

       .... some code here
}

В моем репозитории я могу сделать Dependency Injection для конструктора без проблем .

В моем абстрактном классе WebCaller Мне нужно каким-то образом получить доступ к HttpContext, я читал, что вы можете Inject IHttpContextAccessor получить доступ к контексту, но поскольку это класс Abstract, который также находится вне веб-проекта , У меня не может быть конструктора.

Я пытался сделать это:

 public abstract class WebCaller<T> : WebRequest, IDisposable
    {
        //[Inject]
        public ITestRepository TestRepo
        {
            get
            {
                return this.HttpContext.RequestServices.GetRequiredService<ITestRepository >();
            }
        }

        ..... more code here
}

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

1 Ответ

1 голос
/ 15 января 2020

Вы можете иметь конструктор в своем абстрактном классе. Просто введите IHttpContextAccessor. Тогда любой производный класс также возьмет IHttpContextAccessor и передаст его своему конструктору base (вашему конструктору абстрактного класса). Вы можете сделать конструктор абстрактного класса protected.

Как:

public abstract class WebCaller<T> : WebRequest, IDisposable
{
    protected WebCaller(IHttpContextAccessor contextAccessor)
    {
    }
}


public class TestRepository : WebCaller<Data>, ITestRepository
{
    public TestRepository(IHttpContextAccessor contextAccessor) : base(contextAccessor)
    {
    }

    string connString = this.GetConnectionString();
    .... some code here
}
...