J'essaie de trouver un moyen de transmettre le contexte http actuel du Web à une classe de service (ou d'initialiser la classe avec une référence). Je fais ceci pour abstraire le reste de l'application d'avoir besoin de savoir quelque chose sur le contexte http. Je souhaite également que le service soit testable en utilisant TDD, probablement en utilisant l'un des frameworks Mockable. Il serait donc préférable d'utiliser une interface plutôt qu'une classe réelle.Passage du contexte Web à un 'service' dans l'application ASP MVC
Un exemple de ce que je voudrais obtenir:
class WebInstanceService
{
private IHttpContext _Context;
public WebInstanceService(... , IHttpContext HttpContext)
{
....
_Context = HttpContext;
}
// Methods...
public string GetInstanceVariable(string VariableName)
{
return _Context.Current.Session[VariableName];
}
}
L'une des principales questions que j'est qu'il n'y a pas IHttpContext, le contexte http .net est une sous-classe d'une classe abstraite qui peut Ne soyez pas moqués (facilement?).
Un autre problème est que je ne peux pas initialiser les instances globales de la classe car le contexte ne sera pas pertinent pour la plupart des requêtes.
je pouvais faire la classe statique, et exiger que le contexte à transmettre à chaque fonction comme on l'appelle plus facile à tester par exemple
public static string GetInstanceVariable(string VariableName, HttpContext Context)
{ ... }
mais cela ne fait pas la classe, je dois encore créer un HttpContext et en outre tous les services non-web-aware qui veulent utiliser cette classe doivent soudainement être en mesure de récupérer le contexte qui les oblige à être étroitement couplés au serveur web - la raison complète pour vouloir créer cette classe dans le premier endroit.
Je suis ouvert à TOUTES les suggestions - en particulier celles que les gens connaissent facilitent les tests de TdD. Comment les gens me suggéreraient-ils d'aborder ce problème?
Vive
C'est exactement ce que j'essaie de faire, je ne veux pas que les services de mon application doivent s'inquiéter de l'accès à la session pour récupérer des données, je préfère qu'ils passent par la classe WebInstanceService. – Ash
Je voudrais même interroger WebInstanceService. Le service doit-il savoir que cela provient du Web? –