Невозможно получить доступ к объекту 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 ответ
Контекст запроса и ответа относится к объектам запроса, и для каждого контекста запроса доступна отдельная копия, поэтому нет смысла вводить их через конструктор, поэтому вместо этого им следует передавать параметр каждого метода, который их требует.