0
我經常需要一個客戶端軟件包和一些國際化的演示文稿和視圖中的消息。GWT注射:需要良好的練習
我想知道哪些是最好的方法讓他們:注射或Singleton?
解決方案1:到現在爲止,我用使用的消息辛格爾頓得到:
public interface MyMessages extends Messages{
String key1();
String key2();
...
class Instance {
private static MyMessages instance = null;
public static MyMessages getInstance() {
if (instance == null) {
instance = GWT.create(MyMessages.class);
}
return instance;
}
}
}
FooView.java:
MyMessages.Instance.getInstance().key1();
解決方案2:它會更好用這樣的注射來得到它?
private MyMessages i18n;
@Inject
public FooView(MyMessages i18n){
this.i18n=i18n;
}
第二個解決方案似乎更清潔給我,但我有時會卡住,當我需要它使用了一些國際化的字符串非空的構造:
@Inject
private MyMessages i18n;
public Bar(Foo foo){
/*
* do something which absolutely requires i18n here.
* The problem is that injectable attributes are called
* after the constructor so i18n is null here.
*/
foobar();
}
「非空構造函數」=>「非空構造函數「,對不起:) – user2147970 2013-04-11 13:05:42
然後注入'MyMessages'作爲構造函數參數有什麼問題? (就像你在上面的'FooView'中做的那樣) – 2013-04-11 13:18:25
我其實並不知道鄰接輔助注入,因此我閱讀了關於它的google文檔。謝謝你,這在一些使用情況下非常有用。也就是說,對於需要國際化或捆綁的每個班級使用輔助注射似乎很重要。因此,對於這個用例,我將繼續使用GWT.create():) – user2147970 2013-04-15 06:54:08