![]() |
Spring4D Inject mit Zusatzinformation
Hallo,
Ich beschäftige mich zur Zeit mit Spring4D, vor allem Dependency Injection. Das Framework ist echt Klasse. Aber (gibt es ja immer) Ich würde gerne die Injection durch ein anderes Attribute oder wie auch immer aufdröseln......, Beispiel:
Delphi-Quellcode:
Hat hier schon jemand so etwas gemacht, oder kennt einen anderen Ansatz?
unit Unit1;
interface uses System.Sysutils, System.Classes, Spring.Container.Common; type IInjectIdea = interface ['{30CECD93-14F3-41C3-9D35-9D708C8A6C5E}'] procedure Doit; end; IIdea = interface ['{84CC92C5-7BE7-4941-B89A-CF7905861038}'] procedure NewIdea; end; TDependencyIdea = class(TInterfacedObject, IIdea) private // Gibt es so etwas in der Richtung? // Ich würde gerne die Injection durch ein anderes Attribute oder wie auch immer aufdröseln......, // Nur ne Idee: [INJECTNAME] // Wird im Constructor gesetzt ud sollte eigentlch zum Zeitpunkt der Injection da sein... fInjectName : String; [INJECT] [INJECTFROMNAME('fInjectName')] // Anhand dieses Attributes auflösen fInjectIdea : IInjectIdea; procedure NewIdea; public constructor Create(const aInjectName : String); end; implementation { TDependencyIdea } constructor TDependencyIdea.Create(const aInjectName : String); begin inherited Create; fInjectName := aInjectname; end; procedure TDependencyIdea.NewIdea; begin fInjectIdea.Doit; end; end. |
AW: Spring4D Inject mit Zusatzinformation
Hallo,
Es gibt ein Attribute [Inject] oder [Inject('logging.logger2')] im Spring4d Framework. Beispiel findest Du unter den Test und Samples von Spring4D wie unter ..\Spring4D\Samples\IntroToDependencyInjection\8-FieldInjection\... Vielleicht hilft der Post von Nick Hodges ![]() Auch sein Buch dazu ist zu empfehlen. |
AW: Spring4D Inject mit Zusatzinformation
Danke für die Antwort,
ich habe mich wohl nicht präzise genug ausgedrückt :-( Was ich erreichen will, ist das die Injection zum Interface anhand des finjectname aufgelöst wird. Angenommen ich habe 2 Classen die das IInjectIdea Interface unterstützen, jetzt hätte ich gerne das es anhand des Feldes finjectname aufgelöst wird. Also wenn ich die Klasse mit Create('Inject1') oder Create('Inject2') auflöse die Injection anhand dieses String erzeugt wird.
Delphi-Quellcode:
Wobei: Wenn ich darüber nachdenke, mache ich mir das leben wahrscheinlich zu schwer,
TDependencyIdea = class(TInterfacedObject, IIdea)
private // Gibt es so etwas in der Richtung? // Ich würde gerne die Injection durch ein anderes Attribute oder wie auch immer aufdröseln......, // Nur ne Idee: [INJECTNAME] // Wird im Constructor gesetzt ud sollte eigentlch zum Zeitpunkt der Injection da sein... fInjectName : String; [INJECT] [INJECTFROMNAME('fInjectName')] // Anhand dieses Attributes auflösen fInjectIdea : IInjectIdea; procedure NewIdea; anstatt FieldInjection einfach im constructor mitschicken..... |
AW: Spring4D Inject mit Zusatzinformation
Ich möchte dir von diesem Vorgehen abraten, da man Code auch mit Nutzung des DI Containers so schreiben sollte, dass er auch noch mit
![]() Ja, der Container kann Field Injection, aber pure DI kann das nicht (ohne RTTI Getüftel). Es wäre hier einfacher und sauberer, deine IInjectIdea Instanz direkt in den Konstruktur zu geben, bei dem Inject Attribute kannst du auch den Namen angeben. |
AW: Spring4D Inject mit Zusatzinformation
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz