是否有基于属性注入的Delphi依赖注入框架?

时间:2012-05-25 13:35:55

标签: delphi dependency-injection

我希望能够以这种方式在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, ...);

2 个答案:

答案 0 :(得分:9)

是的,有。 Delphi Spring Framework

http://www.spring4d.com/

正是这样做的。它有[Inject]属性。

一个警告 - 要使用它,您需要在定义属性的代码中包含Spring单元。否则,编译器将忽略该属性。

答案 1 :(得分:2)

您可以使用Emballo OpenSource项目实现此目标。

请参阅Google代码上的项目: http://code.google.com/p/emballo/wiki/WhyDependencyInjection