Background
I am trying to move business logic out from the controllers into their own services.
Controller
public class AccountController : Controller
{
private readonly IAccountService _accountService;
public AccountController(IAccountService accountService)
{
_accountService = accountService;
}
....
}
I'm using Unity to inject dependencies. I'd like to use the Url.GenerateUrl()
helper method within the implementation of IAccountService
but Url
is a property against the controller.
I looked at the MVC source to see how this is done but it requires me to access the RequestContext
from outside of the controller, and I don't know how to do that.
Question
How do I access the RequestContext from outside the controller? If that won't solve my problem, how do I solve the problem given my setup?
Simply pass this information as parameter. Example:
Now you no longer need UrlHelper inside your service classes. Everything that needs interacting with MVC infrastructure shouldn't be placed in your service classes. They shouldn't depend on any Request, Response, Session, ... It's the controller's responsibility to work with those objects and glue them together with your service classes.
This might not be quite right because I'm unable to test it at the moment, but I think that you can do something like this in .NET 4+:
It might make more sense to pass the context from the controller to your
IAccountService
implementation rather than grabbing it directly fromHttpContext.Current
.