Невозможно получить доступ к объекту HttpContext или Request в конструкторе AsyncController

Я использую AsyncController скажем 'AbstractAbcContoller'

public class AbstractAbcContoller : AsyncController
{
}

и тогда у меня есть еще 3 контроллера, которые наследуют недавно созданный AbstractAbcContoller,

Теперь, когда я создаю конструктор любого из этих 3 контроллеров и пытаюсь получить доступ к объектам HttpContext/Request, я всегда получаю их как нулевые.

Мне нужно инициализировать мои сервисные объекты, которые принимают HttpRequestBase в качестве аргумента в своем конструкторе.

Вместо этого мне пришлось согласиться на этот обходной путь.

public class AbstractAbcController : AsyncController
{
    protected IAbcService GetAbcService(AbstractAbcController controller, HttpRequestBase request)
    {
        if (controller.GetType() == typeof (AbcAddressVerificationController))
            return new AbcAddressVerificationService(request);

        if (controller.GetType() == typeof(AbcPhoneVerificationController))
            return new AbcPhoneVerificationService(request);

        throw new ArgumentException();
    }
}

а затем в контроллере / действии использовать что-то вроде этого

IAbcService abcService = GetAbcService(this, Request);
abcService.DoSomething();

что мне вроде не нравится, я не уверен, что было бы лучше. Пожалуйста посоветуй.

1 ответ

Решение

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

Другие вопросы по тегам