2014-01-31 28 views
1

我對mvc有很好的理解。我仍然不確定的是如何正確使用谷歌guice注入依賴關係。這裏是我的代碼的一部分:用google guice實現MVC觀察者模式

protected void configure() { 
    bind(IAppController.class).to(AppController.class); 
    bind(IAppView.class).to(AppView.class); 
    bind(IAppModel.class).to(AppModel.class); 
} 

現在,我不確定如何正確注入依賴關係。我想問你的意見,以處理這個最好的方法。我注入他們在車隊這樣

public class AppController implements IAppController { 

private IAppView appView; 
private IAppModel appModel; 

@Inject 
public AppController(IAppView appView, IAppModel appModel){ 
    this.appModel = appModel; 
    this.appView = appView; 
} 

}

現在上面的例子中的作品,但增加了另一個問題。我怎樣才能給模型一個視圖的實例?我的觀點是觀察者,我需要在模型中注入控制器中的注入視圖的同一個實例。我想出的另一種方法是簡單地使用注入器來獲取模型,視圖,控制器的實例並在那裏組裝它們?如:

public static void main(String[] args){ 
    Injector injector = Guice.createInjector(new AppBootstrapLoader()); 
    IAppController controller = injector.getInstance(IAppController.class); 
    IAppView view =... 
    IAppModel model =.... 
    controller.setModel(model); 
    controller.setView(view); 
    model.addObserver(view); 
} 

我最後的辦法就是讓模型視圖和控制器作爲單身人士,所以我會確保所有注入情況下是相同的。我對guice仍然陌生,但我仍然無法理解它如何處理依賴關係。我也想幹淨地做這件事,因此我正在研究。我想聽聽你對這種方式的經驗和意見。謝謝。

回答

1

我想你要找的是「方法注射」。請注意,如果給定的依賴關係不存在,則綁定過程將失敗。

方法注入:

@Inject 
public void setView(View view) { 
    this.view = view; 
} 

你也可以使用字段注入。但是我不是它的粉絲,因爲如果你只能通過反射來設置依賴關係,那麼它會讓單元測試更難。

Field注入:

@Inject 
private View view 

來源:injections

+0

我讀過有關。現在我找不到足夠的資源來確保當我創建模型視圖和控制器的實例時,它們將正確組裝。我的意思是模型會收到控制器收到的同一個視圖實例。對不起,剛開始guice – MykelXIII

+0

這聽起來像你想要聲明你的實例爲單身。這可以通過您的模塊(構建綁定時)或使用@Singleton註釋完成。請參閱範圍:https://code.google.com/p/google-guice/wiki/Scopes –

+0

如果我不添加@Singleton註釋guice如何處理依賴注入? – MykelXIII