Me gustaría ser capaz de código en Delphi esta manera, sólo tiene que anotar un campo:¿Existe un marco de inyección de dependencias para Delphi con inyección basada en atributos?
type
TMyClass = class
private
[Inject]
Factory: ISomeFactory;
...
end;
o mediante la asignación de un regulador
type
TMyClass = class
private
FFactory: ISomeFactory;
[Inject]
procedure SetFactory(const AFactory: ISomeFactory);
...
public
property Factory: ISomeFactory read FFactory write SetFactory;
end;
El fondo: Me estoy moviendo código antiguo a una arquitectura orientada a servicios y encontrar que hacer referencia a la capa de servicio siempre conduce a construcciones como
DataModule1.ServiceLayerInstance1.SubSystemN.InvokeSomething(Params, ...);
que podría ser mucho más corto como
type
Form1 = class(TForm1)
private
[Inject]
SubsystemN: ISubsystemN;
...
end;
...
SubsystemN.InvokeSomething(Params, ...);
Evitar el uso de la inyección a base de atributos. Use la inyección de constructor siempre que sea posible. – Steven
@Steven Eso probablemente depende de la dependencia. Si la clase absolutamente no funcionará sin ella, entonces sí, el constructor es más apropiado. Si puede funcionar razonablemente sin él, la inyección de propiedades es una forma de hacerlo opcional. – R0MANARMY
@ R0MANARMY: Pero aún así no debería tener que usar un atributo para usar la inyección de propiedades. Esto obliga a la aplicación a tomar una dependencia del contenedor, pero la aplicación debe ser inconsciente. – Steven