2012-05-25 82 views
5

我很想能夠在Delphi這種方式代碼,只需註釋字段:是否有一個基於屬性的注入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

避免在使用基於屬性注入。儘可能使用構造函數注入。 – Steven

+0

@Steven這可能取決於依賴。如果沒有它,絕對不能工作,那麼是的,構造函數更合適。如果沒有它可以合理地工作,注入財產是使其成爲可選項的一種方法。 – R0MANARMY

+1

@ R0MANARMY:但是您仍然不應該使用屬性來使用屬性注入。這迫使應用程序對容器進行依賴,但應用程序應該沒有意義。 – Steven

回答

9

是非常短的,有。德爾福Spring框架

http://www.spring4d.com/

目的正是這個。它有一個[Inject]屬性。

一個警告 - 使用它,你需要包括彈簧裝置在你的代碼中的屬性被定義在哪裏。否則,編譯器將忽略該屬性。