Ich habe begonnen, Simple Injector als meinen DI-Container zu verwenden (meistens aus Gründen der Leistung: wenn jemand Vorschläge hat, lass es mich wissen), aber einige der Klassen, die ich geschrieben habe, benutzen HttpContextBase als Konstruktorparameter. Ich habe beschlossen, es jetzt aus dem Konstruktor zu entfernen und eine Eigenschaft zu erstellen, etwa so:
%Vor%aber ich mag diese Lösung nicht ... irgendwelche Ratschläge?
Sie sollten Konstruktorinjektionen gegenüber allem anderen bevorzugen. Dies ist fast immer möglich. Sie können Ihre HttpContextBase
wie folgt registrieren:
Dies kann zu einem Problem beim Aufruf von Verify()
führen, da HttpContext.Current
während des Starts der Anwendung null
ist und HttpContextWrapper
das Übergeben von null an den Konstruktor nicht erlaubt.
Es ist immer gut zu versuchen, Ihre Konfiguration überprüfbar zu halten , und Sie können diese Registrierung zu den folgenden ändern:
%Vor% FakeHttpContext
ist eine leere HttpContextBase
-Implementierung, um zu verhindern, dass null
zurückgegeben wird, wenn der Container überprüft wird. Das FakeHttpContext
ist einfach das:
Beachten Sie jedoch, dass es sich bei HttpContext um Laufzeitdaten und das Einfügen von Laufzeitdaten in Komponenten während der Erstellung handelt ein Anti-Muster . Anstatt den HttpContext oder eine Abstraktion darüber in Ihre Komponenten zu injizieren, sollten Sie eine anwendungsspezifische Abstraktion erstellen, die dem Benutzer das bietet, was er tatsächlich benötigt (z. B. eine Benutzeridentität oder Mandanten-ID). Die Implementierung dieser Abstraktion kann einfach HttpContext.Current intern aufrufen, was die Notwendigkeit von HttpContext vollständig verhindert.
Tags und Links .net dependency-injection httpcontext simple-injector