我是相當新的吉斯所以希望這不是一個明顯的問題...注入實例化無法控制的類的最佳方法?
我負責的一個框架,它動態地實例化我的應用程序的一個類(我們稱之爲C
)使用反射,所以我無法控制它的實例化。此外,在框架實施後,我無法輕易訪問新創建的C
。下面是C
會是什麼樣子:
public class C implements I { public C() { // this ctor is invoked by the framework so can't use DI here? } public void initialize() { // this is a post instantiation hook which the f/w will invoke } private void m() { Dependency d = Dependency.getInstance(); d.doSmth(); } }
我想C
使用DI收購Dependency
。這裏Dependency
顯然是單身人士,但這通常不一定是這種情況。
我想出了兩種可能的解決方案,無論是它的感覺很整潔,所以我認爲我會問專家:
靜態注入。我很努力地看到,這是如何大大改善服務定位器反模式 - 雖然我最終會得到非最終的靜態字段,可以在外部操縱...嗯。
該框架支持
C
的掛鉤以在實例化後自行初始化(上面示出的initialize()
方法)。這個方法可以使用setter注入來自我注入新創建的實例。
隨着2,我想這意味着更多的外部可變性,但至少暴露了依賴多一點明確的東西像單元測試。麻煩的是:在那種情況下,我怎樣才能使用Guice Injector(依靠另一個服務定位器)?我也讀過(並且傾向於認同),明確提到整個應用代碼中的Injector是可疑的做法。
您的洞察力將非常感激。
非常感謝,
基督教
謝謝傑西,這聽起來和我上面的選項1類似;儘管我認爲'提供者'的使用確實使得這種模式更具普遍性。 – sxc731 2011-03-21 17:54:15