Я пытаюсь найти способ передачи текущего веб-контекста http классу обслуживания (или инициализации класса со ссылкой на него). Я делаю это, чтобы абстрагировать остальную часть приложения от необходимости знать что-либо о контексте http.
Я также хочу, чтобы сервис тестировался с использованием TDD, возможно, с использованием одной из структур Mockable. Следовательно, было бы предпочтительнее использовать интерфейс, а не реальный класс.
Пример того, чего я хотел бы достичь:
class WebInstanceService
{
private IHttpContext _Context;
public WebInstanceService( ... , IHttpContext HttpContext )
{
....
_Context = HttpContext;
}
// Methods...
public string GetInstanceVariable(string VariableName)
{
return _Context.Current.Session[VariableName];
}
}
Одна из основных проблем, с которыми я столкнулся, заключается в том, что IHttpContext не существует, http-контекст .net является подклассом абстрактного класса, который не может быть смоделирован (легко?).
Другая проблема заключается в том, что я не могу инициализировать глобальные экземпляры класса, так как тогда контекст не будет релевантным для большинства запросов.
Я мог бы сделать класс статичным и потребовать передачи контекста каждой функции, как она называется, т.е. 1012 *
public static string GetInstanceVariable(string VariableName, HttpContext Context)
{ ... }
но это не облегчает тестирование класса, мне все еще нужно создать HttpContext и, кроме того, любые не поддерживающие веб-сервисы службы, которые хотят использовать этот класс, внезапно должны иметь возможность извлекать контекст, требующий от них быть тесно связанным с веб-сервером - вот и вся причина создания этого класса.
Я открыт для ВСЕХ предложений, особенно тех, которые, как известно, облегчают тестирование на tdd. Как бы люди предложили мне заняться этой проблемой?
Приветствия