Mi piacerebbe essere in grado di codificare in Delphi questo modo, è sufficiente annotare un campo:Esiste un Dipendenza per Delphi con un'iniezione basata su attributi?
type
TMyClass = class
private
[Inject]
Factory: ISomeFactory;
...
end;
o attribuendo un setter
type
TMyClass = class
private
FFactory: ISomeFactory;
[Inject]
procedure SetFactory(const AFactory: ISomeFactory);
...
public
property Factory: ISomeFactory read FFactory write SetFactory;
end;
Lo sfondo: mi sto muovendo vecchio codice a un'architettura orientata ai servizi e scopri che fare riferimento al livello di servizio porta sempre a costrutti come
DataModule1.ServiceLayerInstance1.SubSystemN.InvokeSomething(Params, ...);
che potrebbe essere molto più breve come
type
Form1 = class(TForm1)
private
[Inject]
SubsystemN: ISubsystemN;
...
end;
...
SubsystemN.InvokeSomething(Params, ...);
Prevenire con iniezione a base attributo. Utilizzare l'iniezione del costruttore ove possibile. – Steven
@Steven Questo probabilmente dipende dalla dipendenza. Se la classe assolutamente non funzionerà senza di essa, allora sì, il costruttore è più appropriato. Se può ragionevolmente funzionare senza di esso, l'iniezione di proprietà è un modo per renderlo opzionale. – R0MANARMY
@ R0MANARMY: Tuttavia, non è necessario utilizzare un attributo per l'utilizzo di un'iniezione di proprietà. Ciò impone all'applicazione di assumere una dipendenza dal contenitore, ma l'applicazione dovrebbe essere ignara. – Steven