Wir haben eine ASP.NET MVC App, die IoC verwendet, um Service-Referenzen in Controller und Repository-Referenzen in Services einzufügen.Mit IoC kann ein Singleton mit Objekten injiziert werden, die eine transiente Lebensdauer haben?
Controller müssen eine Lebensdauer von Transient haben, da sie pro Anfrage instanziiert werden müssen. Wenn jedoch der gesamte IoC-Stack pro Anfrage neu aufgebaut wird, wird dies ein wenig Overhead. Wir haben mehr Abhängigkeiten, als ich möchte, und eine Option wäre, mehr Controller zu haben, die jeweils weniger Abhängigkeiten im Stack haben. Aber wenn ich das jetzt beiseitelasse, ist meine Frage: Wenn ein Objekt, das als Singleton injiziert wird, Abhängigkeiten mit einer vorübergehenden Lebenszeit hat, werden diese Abhängigkeiten im Grunde genommen wie Singletons behandelt, weil es dem Singleton gehört?
Insbesondere dann, wenn wir den folgenden
RepositoryA haben (muss vorübergehend sein, da aktuelles Design einen Benutzerkontext in Konstruktor injiziert) ServiceA (Singletons) ControllerA (transient)
wie so instanziiert:
Wird RepositoryA im Wesentlichen einmal instanziiert, weil ServiceA einmal instanziiert wird?
Ich bin 99% sicher, die Antwort ist ja, aber wollte nur die Menge an Refactoring bestätigen, die ich hier tun muss.
Auch unter der Annahme, dass Dienste und Repositorys KEINE benutzer-/anforderungsspezifischen Instanzvariablen als Designansatz haben, gibt es einen Grund, keine Singleton-Lebensdauer für sie zu verwenden?
Ich denke, die wirkliche Frage ist, warum muss es ein Singleton sein? – dotjoe
@dotjoe das ist nicht die wirkliche Frage, aber trotzdem ein sehr guter Punkt :-). Es erscheint mir merkwürdig, dass ein solcher Dienst als Singleton konfiguriert ist.Irgendwelche Leistungsprobleme? – Steven
Außerdem ist die Verwendung einer 'Service'-Klasse, die Geschäftslogik enthält, etwas, das ich heutzutage gerne verhindern möchte. Wenn Sie interessiert sind, werfen Sie einen Blick auf [dieser Artikel, der beschreibt, beschreibt Geschäftsvorgänge/Anwendungsfälle als Nachrichten] (http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91). – Steven