0

我有一個Main.fla(由Main.as控制),它有一個名爲Slide的小孩(由另一個類Slide.as控制的Movieclip)。這是在ActionScript 3中的依賴注入?

有時,我的Slide對象必須在他父親Main對象上調用方法「nextSlide」。要做到這一點我想「this.parent.nextSlide()」,但我得到這個錯誤:

1061:通過靜態類型flash.display使用的引用調用可能未定義的方法nextSlide:級DisplayObjectContainer。

所以,我試圖通過構造函數傳遞父對象:

VAR幻燈片:幻燈片=新的幻燈片(這)

而且,在我的Slide類,一個用這樣的:

public function Slide(myParent:Main) { 
    this.myParent = myParent; 
} 
... 
myParent.nextSlide(); 

這是正確的嗎?這是依賴注入嗎?

謝謝。

+0

在一個側面說明你應該重組你如何創建所有這些。我喜歡將OOP看作是試圖對現實生活中存在的東西進行建模,並抽象和封裝信息。因爲現實生活中的物體不會改變,所以你的物體不應該改變太多。因此,Slide對象不應該控制Main類。幻燈片應該只包含可能的圖像,幻燈片編號等。控制類將接受更改幻燈片的輸入,然後通知主。使用事件監聽器和調度是獲取不同對象進行通信的好方法 – Allan 2009-11-04 23:27:37

回答

1

從某種意義上說,它是正確的,它將起作用。但你也可以在parent財產強制轉換爲Main類型,之後就可以調用nextSlide方法:

Main(this.parent).nextSlide(); 

這樣,你告訴編譯器處理parent屬性作爲Main對象。如果parent屬性不是Main對象,則在運行時會出現錯誤。

我不會稱你在做什麼依賴注入。

2

在我看來:是的。這可能是依賴注入的最基本形式,但它仍然在注入類實例中的依賴。我從詹姆斯Shore's文章「依賴注入揭祕」引述:

Dependency injection means giving an object its instance variables. Really. That's it.

見:http://jamesshore.com/Blog/Dependency-Injection-Demystified.html

當然還有很多更依賴注入,有大框架,比如Spring圍繞這一概念構建的。有點沒有靈感,但仍然是一個很好的閱讀:關於DI http://en.wikipedia.org/wiki/Dependency_injection維基百科的文章也有一個關於這個更復雜的文章,從馬丁福勒,它的年齡和老實說,當我第一次讀它時,我不知道什麼他正在談論http://martinfowler.com/articles/injection.html