相关疑难解决方法(0)

匕首的范围2

我可能错过了一些东西,但我认为像@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)

java android dagger-2

26
推荐指数
2
解决办法
1万
查看次数

Dagger 2组件依赖项

是否可以将某些东西注入模块中?

我有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)

java android dependency-injection dagger-2

11
推荐指数
1
解决办法
7601
查看次数

Dagger 2:组件依赖于多个范围组件

我是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.

做同样的事还有更好的选择吗?

android dagger-2

8
推荐指数
1
解决办法
3273
查看次数

标签 统计

android ×3

dagger-2 ×3

java ×2

dependency-injection ×1