2015-05-26 3 views
1

Я использую AsyncController сказать «AbstractAbcContoller»Невозможно получить доступ к HttpContext или объект запроса в конструкторе с AsyncController

public class AbstractAbcContoller : AsyncController 
{ 
} 

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

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

Мне нужно инициализировать объекты службы, которые принимают 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(); 

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

ответ

3

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