Es ist möglich, eine Klasse mit einem Parameter zu registrieren, der erwartungsgemäß vom Erstellungsort übergeben wird?
Ich weiß, dass es so etwas tun kann:
%Vor%Aber dort werden die Parameter an den Ausführungskontext gebunden, wo der Container registriert wird und nicht wo das Objekt getastet wird.
So etwas ist zum Beispiel möglich?
%Vor%Ich kenne einige Leute, die behaupten, sehr einfache Konstruktoren zu haben, aber es gibt Zeiten, in denen ein Konstruktor-Parameter eindeutig den Weg weist:
Das konstruierte Objekt benötigt den Objektparameter, damit die Referenz erfüllt sein muss. Der Parameter macht diese Einschränkung auch deutlich sichtbarer, wenn man sich die Klasse ansieht.
Sie können den Verweis in einer Methode oder Eigenschaft zuweisen und in jeder anderen Methode raise und exception, wenn Sie versuchen, das Objekt zu verwenden, ohne zuerst die Zuweisung vorzunehmen. Ich mag es nicht, diese Art von Code einfach zu schreiben Zeitverschwendung, verwenden Sie einfach den Konstruktorparameter und überprüfen Sie dort. Weniger Code, desto besser IMO.
Auch das Objekt, das übergeben wird, ist lokal für das Objekt, das das neue Objekt unter Verwendung des Containers (zum Beispiel ein Transaction-Objekt) konstruiert und einen Zustand hat (es ist kein neues Objekt, das ich mit dem Container bekommen kann).
Ich habe Resolver-Overrides wie in Unity hinzugefügt.
So können Sie schreiben:
%Vor%Sie könnten diesen Thread sehen: Ссылка
Ich habe dazu eine Implementierung im Framework durchgeführt und verwende sie in meinem Code. Wenn du es willst, schicke ich es dir. Denken Sie daran, dass dies nicht möglich ist, wenn sie Funktionen wie diese in der Codebasis hinzufügen. Baoquan hat meinen Code.
Diese Implementierung behandelt auch, wenn Sie versuchen, ohne alle erforderlichen Parameter aufzulösen, und gibt Ihnen eine Ausnahme, die die fehlenden Parameter zeigt.
Du benutzt es so:
%Vor%Der Wert wird als TValue gespeichert und kann beliebig sein.
Die Registrierung des Parameters mit Ihrer Klasse erfolgt mit Attributen wie dieser:
%Vor%Sie können das auch tun
%Vor%Aber dann hat Ihr Parameter 'FYourValue1' als Name.
Tags und Links delphi dependency-injection delphi-xe2 spring4d