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

¿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?

¿Fue útil?

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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top