Question

Arrière-plan

Je suis en train de déplacer la logique métier à partir des contrôleurs dans leurs propres services.

Contrôleur

public class AccountController : Controller
{
    private readonly IAccountService _accountService; 

    public AccountController(IAccountService accountService)
    {
        _accountService = accountService;
    }

    ....
}

J'utilise l'unité pour injecter des dépendances. Je voudrais utiliser la méthode d'aide de Url.GenerateUrl() au sein de la mise en œuvre de IAccountService mais Url est une propriété contre le contrôleur.

Je regarde la source MVC pour voir comment cela se fait, mais il me faut pour accéder au RequestContext à l'extérieur du contrôleur, et je ne sais pas comment faire.

Question

Comment puis-je accéder RequestContext à l'extérieur du contrôleur? Si cela ne résoudra pas mon problème, comment puis-je résoudre le problème étant donné ma configuration?

Était-ce utile?

La solution

  

Cependant, je voudrais utiliser les méthodes d'aide de Url.GenerateUrl dans mon application de IAccountService

Il suffit de passer ces informations en tant que paramètre. Exemple:

public ActionResult Index()
{
    var someUrl = Url.Action("about");
    _accountService.Foo(someUrl);
}

Maintenant, vous ne UrlHelper besoin dans vos classes de service. Tout ce que les besoins en interaction avec l'infrastructure MVC ne doivent pas être placés dans vos classes de service. Ils ne devraient pas dépendre d'une demande, réponse, session, ... Il est de la responsabilité du contrôleur de travailler avec les objets et les coller ensemble avec vos classes de service.

Autres conseils

Cela pourrait ne pas être tout à fait raison parce que je suis incapable de le tester pour le moment, mais je pense que vous pouvez faire quelque chose comme ça dans .NET 4 +:

using System.Web;
using System.Web.Mvc;

// ...

var helper = new UrlHelper(HttpContext.Current.Request.RequestContext);
string url = helper.GenerateUrl(/* ... */);

peut plus logique de passer le contexte du contrôleur à votre mise en œuvre de IAccountService plutôt que de saisir directement HttpContext.Current .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top