只需在Android應用程序中試用Dagger 2,我覺得可能有更簡單的解決方案來實現我的目標。對於Dagger 2,從其他模塊訪問1模塊內的實例的最佳方式是什麼?
我有2個模塊:
ApplicationModule
其中顧名思義其生命週期是依賴於整個應用程序。UserModule
每當用戶登錄被創建。
現在說我有一個是在ApplicationModule
創造了單Prefs
實例,但我需要訪問它的類UserModule
內,什麼是最好的方式去做這件事?目前我正在ApplicationModule中創建它,然後在創建時將它傳遞給UserModule的構造函數。有沒有辦法避免這樣做,讓匕首爲我管理這件事?
@Module
public class ApplicationModule {
@Provides
@Singleton
public Prefs prefs() {
return new Prefs();
}
}
@Singleton
@Component(modules={ApplicationModule.class})
public interface ApplicationComponent {
Prefs providePrefs();
}
@Module
public class UserModule {
private Prefs prefs;
public UserModule(Prefs prefs) {
// Anyway to avoid having to do this?
this.prefs = prefs;
}
@Provides
@UserScope
public UserService userService() {
// Possible to get the prefs from the ApplicationComponent?
return new UserService(this.prefs);
}
}
@Component(dependencies = {ApplicationComponent.class}, modules = {UserModule.class})
@UserScope
public interface UserComponent extends ApplicationComponent {
UserService provideUserService();
}
謝謝你的迴應大衛,這些例子很有幫助。我確實有一個困惑,如果我像在示例中那樣刪除UserModule構造函數中的參數,UserService是否會在創建UserModule之前創建?既然UserService現在已經實現了它的依賴關係,如果是這樣的話,甚至可以將UserService放在UserModule內強制執行任何操作? – Mike
@Mike你需要一個UserModule來創建你的組件,所以它會在之前創建。這應該不會有影響。模塊只是提供依賴關係,如果他們不能由匕首本身創建 –
明白了,謝謝你的解釋! – Mike