我希望能够以这种方式在Delphi中编码,只需注释一个字段:
type
TMyClass = class
private
[Inject]
Factory: ISomeFactory;
...
end;
或归因于二传手
type
TMyClass = class
private
FFactory: ISomeFactory;
[Inject]
procedure SetFactory(const AFactory: ISomeFactory);
...
public
property Factory: ISomeFactory read FFactory write SetFactory;
end;
背景:我正在将旧代码移动到面向服务的体系结构,并发现引用服务层总是导致像
这样的结构DataModule1.ServiceLayerInstance1.SubSystemN.InvokeSomething(Params, ...);
可能更短,如
type
Form1 = class(TForm1)
private
[Inject]
SubsystemN: ISubsystemN;
...
end;
...
SubsystemN.InvokeSomething(Params, ...);
答案 0 :(得分:9)
是的,有。 Delphi Spring Framework
正是这样做的。它有[Inject]属性。
一个警告 - 要使用它,您需要在定义属性的代码中包含Spring单元。否则,编译器将忽略该属性。
答案 1 :(得分:2)
您可以使用Emballo OpenSource项目实现此目标。
请参阅Google代码上的项目: http://code.google.com/p/emballo/wiki/WhyDependencyInjection