У меня есть это устаревшее ASP.NET webapp, которое в основном перешло на MVC. Проверка кода, как правило, плохая, так как это часто случается с устаревшими приложениями: ответственность лежит в беспорядке, преобладает жесткая связь, такая вещь.Неправильно ли создать HttpContextProvider для использования в IHttpModules?
Я занимаюсь реорганизацией приложения на пару недель, чтобы улучшить тестируемость, делая все возможное, чтобы соблюдать SOLID, и я пришел к этому моменту, когда мне нужно передать HttpContext
или HttpResponse
и тому подобное методу в HttpModule
. Теперь, очевидно, HttpModules
может захватить копию HttpApplication
и просто передать это везде - то есть как это atm - но я предпочел бы не предоставлять доступ к столь большому корневому объекту к зависимости.
Поскольку некоторые из наших IHttpModules
инициализируются перед MVC даже входит в игру, у меня были проблемы с использованием контейнера IoC, чтобы ввести HttpContextBase
или HttpResponseBase
в конструкторах различных помощников, которые используют модули. Таким образом, я должен либо передать HttpContextBase
методам указанных хелперов - который взимание налогов использовать и чувствует себя несколько неправильно - или создать что-то вроде этого:
public class HttpContextProvider : IHttpContextProvider {
// ... ctor
public HttpContextBase GetContext() { return HttpContext.Current; }
}
Я бы тогда впрыснуть экземпляр, реализующий IHttpContextProvider
в качестве помощника и вызова .GetContext()
на нем позже по мере необходимости.
Интуитивно я чувствую, что, возможно, я что-то делаю неправильно, но не могу понять, что это может быть. Весь этот рефакторинг достаточно сложный - и коэффициент автобуса в команде достаточно низкий - я не решаюсь просить слишком много времени для этого вопроса ведущего разработчика, что практически можно рассматривать как академическое с практической точки зрения.