2012-01-11 53 views
0

id喜歡在我的WicketApplication中初始化我的導入的Client.class,後者與後端進行通信。我知道我必須在我的WebApplication.class中執行此操作(在init方法中?)。但是我怎麼能在我的Page.classes中獲得這個實例?我如何與它溝通?Wicket - 初始化外部類

感謝意見

回答

2

您可以通過使用getApplication()WebApplication.get()獲取當前的應用。從那裏你應該能夠縮小它的類型到你自己的實現中,並在你的Client.class屬性上調用getter。請記住,應用程序是所有用戶之間的共享對象,如果您不希望發生令人討厭的事情,您的客戶屬性必須是線程安全的...

+0

您也可以在您的應用程序類上創建一個靜態方法,爲您執行強制轉換,即'MyApplication.get()'將返回'MyApplication'類型。 – biziclop 2012-01-12 15:13:11

0

最不緊密耦合的方式是通過使用像Google Guice這樣的依賴注入框架並將實例注入到組件中。除此之外,Cedric Gatay的答案涵蓋了很好的解決方案。

使用DI將提供額外的好處,無需擔心爲單元測試獲得不同的實現,因爲您可以在測試模塊中輕鬆定義一個實現。

您可以通過在您的頁面構造器中手動「注入」您的外部類來保持中立地位。這樣可以避免在這一點上包含新技術的麻煩,而不會阻礙稍後切換到新技術的方式。這樣你的頁面就不會被綁定到一個特定的(你的)WebApplication的實現上,並且可以通過在測試中提供一個不同的(模擬的)你的外部類的實例來輕鬆測試。

+0

今天我讀了關於這個DIs。我對門票很陌生,我首先想到不用注射即可嘗試。但不建議沒有它的工作,不是嗎? – user1090145 2012-01-12 16:26:45

+0

@ user1090145由於我是Wicket和Google Guice的忠實粉絲,所以我不能問這個問題。我認爲,它使得解耦更容易被認可,但其他人則認爲它在意想不到的地方隱藏了重要信息(如模塊)。我的答案中包含了另一種方法。 – Nicktar 2012-01-13 08:28:18