只需在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