¿Cómo accedo a la RequestContext Fuera del controlador?
-
03-10-2019 - |
Pregunta
Fondo
Estoy tratando de mover la lógica de negocio a partir de los controladores en sus propios servicios.
Controller
public class AccountController : Controller
{
private readonly IAccountService _accountService;
public AccountController(IAccountService accountService)
{
_accountService = accountService;
}
....
}
Estoy usando la Unidad inyectar dependencias. Me gustaría utilizar el método Url.GenerateUrl()
ayudante dentro de la implementación de IAccountService
pero Url
es una propiedad frente al controlador.
Me miró a la fuente MVC para ver cómo se hace esto pero me requiere para acceder al RequestContext
desde fuera del controlador, y no sé cómo hacerlo.
Pregunta ??h2>
¿Cómo accedo a la RequestContext desde fuera del controlador? Si eso no va a resolver mi problema, ¿cómo puedo solucionar el problema dado mi configuración?
Solución
Sin embargo, me gustaría utilizar los métodos Url.GenerateUrl ayudante dentro de mi aplicación de IAccountService
Basta con pasar esta información como parámetro. Ejemplo:
public ActionResult Index()
{
var someUrl = Url.Action("about");
_accountService.Foo(someUrl);
}
Ahora que ya no necesita UrlHelper dentro de sus clases de servicio. Todo lo que hay que interactúan con la infraestructura MVC no deben ser colocados en sus clases de servicio. Ellos no deben depender de cualquier solicitud, respuesta, Sesión, ... Es responsabilidad del controlador para el trabajo con los objetos y unirlos con sus clases de servicio.
Otros consejos
Esto podría no ser del todo bien porque soy incapaz de probarlo en el momento, pero creo que se puede hacer algo como esto en .NET 4 +:
using System.Web;
using System.Web.Mvc;
// ...
var helper = new UrlHelper(HttpContext.Current.Request.RequestContext);
string url = helper.GenerateUrl(/* ... */);
podría tener más sentido para pasar el contexto del controlador a su aplicación IAccountService
en vez de agarrar directamente desde HttpContext.Current
.