2011-03-04 138 views
3

不工作我有使用GinInjector,一個新的項目中,我使用GWT-查看樣複合等依賴注入GWT 2.1

我已經注入在主菜單中(如下像ProductList)的項目。這工作正常!

某處我想從一個小組件到我的主菜單中的一個項目的參考,以便更新它。我嘗試這樣注入它:

public class ProductForm extends Composite { 
    ... 
    @Inject 
    ProductList list; 
    .... 

} 

但是,當我使用list我總是null。因此,ProductList這樣定義:

public class MyModule extends AbstractGinModule { 
    ... 
    @Override 
    protected void configure() { 
     bind(ProductList.class).asEagerSingleton(); 
     bind(ProductForm.class).asEagerSingleton(); 
    } 
    ... 
} 

任何想法我做錯了什麼?!

解決方案: 我沒有提到ProductForm是使用UiBinder的的@UIField標籤,以便將其注入將創建一個新的對象,而不是一個使用UiBinder的創建的產品列表的元素。

我不得不重構代碼以包含演示者和事件總線,以便不需要視圖之間的直接引用(除了@UIField屬性)。

+0

請向我們展示您獲取ProductList對象的代碼。 – pjulien 2011-03-20 14:31:27

+0

你是否回答了你的問題? – Snekse 2011-03-22 17:51:39

回答

4

我是通過晶晶文檔的工作:我會在這裏引用它:

晶晶「魔術師」 晶晶試圖使注射無痛的,從你的代碼中刪除儘可能多的樣板。要做到這一點,生成的代碼包含幕後的一些魔術,這在這裏解釋。

延遲綁定 Gin優化代碼的一種方法是通過自動化GWT延遲綁定。所以如果你通過延遲綁定(但不通過Guice/Gin綁定)注入接口或class1綁定,Gin將在內部調用GWT.create並注入結果。一個例子是GWT消息和常數(用於I18N目的):

public interface MyConstants extends Constants { 
    String myWords(); 
} 

public class MyWidget { 

    @Inject 
    public MyWidget(MyConstants myconstants) { 
    // The injected constants object will be fully initialized - 
    // GWT.create has been called on it and no further work is necessary. 
    } 
} 

注:杜松子酒將不結合通過GWT.create在單範圍中創建的實例。這不應該導致不必要的開銷,因爲延遲綁定生成器通常在其生成的代碼中實現單例模式。

你可以在這個網址看到自己:http://code.google.com/p/google-gin/wiki/GinTutorial

它沒有提到爲什麼單不能延遲綁定,並注入被自動生成。

您可以通過在構造函數中使用GWT.create(YourFactoryInterface.class).getProductList()手工創建來解決此問題。

這意味着測試puposes,你將需要拉GWT。創建成一個單獨的方法,並在子類中覆蓋它並使用它像測試:

YourFactoryInterface getFactory() { 
    return GWT.create(YourFactoryInterface.class) 
} 

getFactory().getProductList() 
+0

啊,好的,自動生成的代碼是這樣生成的:GWT.create(RequiredClass.class) 無論何時需要實例。爲了使這個代碼正常工作,RequiredClass必須有一個可解析的@Injected或0參數的構造函數。 當使用GWT.create以這種方式完成延遲綁定代碼生成時,我明白了爲什麼它始終難以返回singleton。 – Zasz 2011-03-21 09:42:18

+0

謝謝!這幫了我很多! – adranale 2011-03-24 14:32:59

0

Ginjector是否創建了ProductForm?我想也許這需要使它填充注入的變量。

+0

是的!它不工作! – adranale 2011-03-04 09:57:54

1

杜松子酒的asEagerSingleton()結合被打破了好一陣子,並插入空。不知道修補程序何時進入,但我在v1.0上遇到了急切的單身問題。如果您有興趣,請參閱the issuethe explanation。我要麼切換到常規的.in(Singleton.class)綁定,要麼確保您使用的是Gin 1.5。