我可能错过了一些东西,但我认为像@Singleton这样的Scopes用来定义"范围生命周期".
我在Android应用程序中使用Dagger 2(但我不认为这个问题与Android有关).
我有1个模块:
@Module public class MailModule {
@Singleton @Provides public AccountManager providesAccountManager() {
return new AccountManager();
}
@Singleton @Provides public MailProvider providesMailProvider(AccountManager accountManager) {
return new MailProvider(accountManager);
}
}
Run Code Online (Sandbox Code Playgroud)
我有两个不同的组件,@Singleton范围:
@Singleton
@Component(modules = MailModule.class)
public interface LoginComponent {
public LoginPresenter presenter();
}
@Singleton
@Component(
modules = MailModule.class
)
public interface MenuComponent {
MenuPresenter presenter();
}
Run Code Online (Sandbox Code Playgroud)
两者都有,MenuPresenter并且LoginPresenter有一个@Inject构造函数.虽然MenuPresenter期望MailProvider作为参数,但LoginPresenter需要AccountManager:
@Inject public MenuPresenter(MailProvider mailProvider) { ... }
@Inject public LoginPresenter(AccountManager …Run Code Online (Sandbox Code Playgroud) 是否可以将某些东西注入模块中?
我有2个基本模块/组件:
@Component(modules = {OkHttpModule.class})
public interface OkHttpComponent extends AppComponent {
OkHttpClient provideOkHttpClient();
}
@Module
public class OkHttpModule {
@Provides
OkHttpClient provideOkHttpClient() {
return mHttpClient;
}
}
Run Code Online (Sandbox Code Playgroud)
@Component(modules = {GsonModule.class})
public interface GsonComponent extends AppComponent {
Gson provideGson();
}
@Module
public class GsonModule {
@Provides
Gson provideGson() {
return mGson;
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个模块/组件,我想创建第3个模块:
@Component(dependencies = {OkHttpComponent.class, GsonComponent.class},
modules = {RetrofitModule.class})
public interface RetrofitComponent extends AppComponent {
API provideAPI();
}
@Module
public class RetrofitModule {
@Inject OkHttpClient mHttpClient;
@Inject Gson mGson; …Run Code Online (Sandbox Code Playgroud) 我是Dagger 2的新手.我正在尝试在我的Android项目中实现它.我有Service需要的东西GoogleApiClient.我正在使用Dagger将其注入此服务中.
@FragmentScoped
@Component(dependencies = {NetComponent.class, RepositoryComponent.class})
public interface CustomServiceComponent {
void inject(CustomService customService);
}
@Singleton
@Component(modules = {AppModule.class, NetModule.class})
public interface NetComponent {
GoogleApiClient getGoogleApiClient();
}
@Singleton
@Component(modules = {AppModule.class, RepositoryModule.class})
public interface RepositoryComponent {
DatabaseService getDatabaseService();
}
Run Code Online (Sandbox Code Playgroud)
AppModule,NetModule并且RepositoryModule有方法标记@Singleton @Provides
当我构建我的项目时,我收到此错误:
locationServiceComponent依赖于多个作用域组件:@Singleton NetComponent @Singleton RepositoryComponent
我理解我LocationComponent不能依赖于两个@Singleton范围的组件,但我需要在我的服务中同时使用它们@Singleton.
做同样的事还有更好的选择吗?