Ist es möglich, eine Klasse mit einem erwarteten Parameter zu registrieren, der von dem Erstellungspunkt aus übergeben werden soll?
Ich weiß, dass so etwas getan werden kann:
GlobalContainer.RegisterType.Implements.
AsTransient.DelegateTo(
function: TUserProcessor
begin
Result := TUserProcessor.Create(GetCurrentUser);
end
);
Aber dort sind die Parameter an den Ausführungskontext gebunden, an dem der Container registriert wird und nicht, wo das Objekt instanziiert wird.
Ist so etwas zum Beispiel möglich?
GlobalContainer.Resolve([FCurrentUser]);
Ich weiß, dass einige Leute dafür plädieren, sehr einfache Konstruktoren zu haben, aber manchmal scheint ein Konstruktorparameter der richtige Weg zu sein:
-
Das erstellte Objekt benötigt das Objektparameter, um zu funktionieren, daher muss die Referenz erfüllt sein. Der Parameter macht diese Beschränkung auch beim Blick auf die Klasse viel offensichtlicher.
-
Sie können die Referenz in einer Methode oder Eigenschaft zuweisen und in jeder anderen Methode eine Ausnahme auslösen, wenn Sie versuchen, das Objekt zu verwenden, ohne die Zuweisung zuerst vorzunehmen. Ich mag es nicht, diesen Code zu schreiben, es ist einfach eine Zeitverschwendung, verwenden Sie einfach den Konstruktorparameter und überprüfen Sie dort. Weniger Code ist meiner Meinung nach besser.
-
Auch das übergebene Objekt ist lokal für das Objekt, das das neue Objekt unter Verwendung des Containers erstellt (zum Beispiel ein Transaktionsobjekt) und hat einen bestimmten Zustand (es handelt sich nicht um ein neues Objekt, das ich mit dem Container abrufen kann).