In einer Web-App muss ich nur eine Instanz einer Klasse namens ProcessManager haben. Eine Möglichkeit besteht darin, es zu einem Singleton zu machen. Die andere Möglichkeit besteht darin, mithilfe von HttpApplicationState sicherzustellen, dass ich immer auf dieselbe Instanz zugreife:
%Vor%Welche Methode ist besser und warum?
Ausgehend von der begrenzten Beschreibung, die Sie angegeben haben, würde ich ein Singleton auswählen, da es dann nicht von HttpContext.Current abhängig ist und außerhalb der ASP.Net-Pipeline verwendet werden kann (z. B. wenn Sie möchte Komponententests schreiben.)
(Wenn Sie etwas in ApplicationState festlegen, müssen Sie auch zuerst Sperren () darauf, und dann entsperren (), nachdem Sie fertig sind, um sicherzustellen, dass es threadsicher ist.)
Alternativ können Sie beim Erstellen des ProcessManager die Injektion eines HttpContext zulassen, so dass Sie ihn mit einem verspotteten HttpContext verwenden können.
(Ich gehe davon aus, dass Ihr ProcessManager-Konstruktor privat ist.)
Es wäre am besten, es zu einem Singleton zu machen, weil ein solcher Ansatz es anderen Programmierern, die Ihren Code pflegen, unmöglich machen würde, versehentlich mehrere Instanzen zu erstellen. Es gibt nichts, was einen Verbraucher daran hindert, direkt auf den HttpApplicationState zuzugreifen und die ProcessManager-Instanz zu entfernen und zu ersetzen. Daher müssen Sie sich auf Konvention verlassen, um die Instanz von ProcessManager in HttpApplicationState zu schützen.
Nur wenn ein tatsächlicher Anwendungsfall für mehrere Instanzen der Klasse vorhanden ist, ist es sinnvoll, mehrere Instanzen zuzulassen, während die Konvention zum Schutz der Instanz in HttpApplicationState verwendet wird.
Wenn du planst, es als Singleton zu implementieren, nach Jon Skeet (aka C # guru), Er persönlich bevorzugt den folgenden Code
%Vor%