6

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

2 回答 2

9

就在这里。Delphi Spring 框架

http://www.spring4d.com/

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

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

于 2012-05-25T14:22:57.683 回答
2

您可以通过 Emballo OpenSource 项目实现这一目标。

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

于 2012-05-25T15:40:12.157 回答