Ich versuche, eine Möglichkeit der Weitergabe des aktuellen Webkontexts an eine Serviceklasse (oder Initialisierung der Klasse mit einem Verweis darauf) zu erarbeiten. Ich mache das, um den Rest der App zu abstrahieren, ohne etwas über den http-Kontext wissen zu müssen.Übergeben von Webkontext zu einem "Dienst" in ASP MVC-App
Ich möchte auch den Dienst mit TDD testbar sein, wahrscheinlich mit einem der Mockable Frameworks. Daher wäre es vorzuziehen, eine Schnittstelle anstelle einer tatsächlichen Klasse zu verwenden.
Ein Beispiel dafür, was Ich mag würde erreichen:
class WebInstanceService
{
private IHttpContext _Context;
public WebInstanceService(... , IHttpContext HttpContext)
{
....
_Context = HttpContext;
}
// Methods...
public string GetInstanceVariable(string VariableName)
{
return _Context.Current.Session[VariableName];
}
}
Eine der wichtigsten Fragen ist, ich habe, dass es keine IHttpContext ist, der .net http Kontext ist eine Unterklasse einer abstrakten Klasse, wo nicht verspottet werden (leicht?).
Ein weiteres Problem ist, dass ich globale Instanzen der Klasse nicht initialisieren kann, da dann der Kontext für die meisten Anfragen nicht relevant ist.
ich die Klasse statische machen könnte, und erfordern den Kontext zu jeder Funktion übergeben werden, wie es heißt
public static string GetInstanceVariable(string VariableName, HttpContext Context)
{ ... }
genannt wird, aber dies ist nicht die Klasse machen einfacher testen, ich muss noch zu Erstellen Sie einen HttpContext, und zusätzlich müssen alle nicht webfähigen Dienste, die diese Klasse verwenden möchten, in der Lage sein, den Kontext abzurufen, der eine enge Kopplung mit dem Webserver erfordert - der ganze Grund, diese Klasse in der ersten Klasse erstellen zu wollen Ort.
Ich bin offen für alle Vorschläge - vor allem diejenigen, die Leute wissen, erleichtern einfache TDD-Tests. Wie würden die Leute vorschlagen, dass ich dieses Problem angehen?
Prost
Dies ist genau das, was ich versuche, ich möchte nicht, dass Dienste in meiner App sich Gedanken über den Zugriff auf die Sitzung zum Abrufen von Daten machen müssen, sondern über die WebInstanceService-Klasse. – Ash
Ich würde sogar WebInstanceService in Frage stellen. Muss der Dienst wissen, dass er aus dem Internet stammt? –