gpt4 book ai didi

android - Dagger 2 : Component depends on more than one scoped component

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:04:46 24 4
gpt4 key购买 nike

我是 Dagger 2 的新手。我正在尝试在我的 Android 项目中实现它。我有一个需要 GoogleApiClientService。我正在使用 Dagger 将其注入(inject)到该服务中。

@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();
}

AppModuleNetModuleRepositoryModule 都有标记为 @Singleton @Provides 的方法当我构建我的项目时,出现此错误:

The locationServiceComponent depends on more than one scoped component: @Singleton NetComponent @Singleton RepositoryComponent

我知道我的 LocationComponent 不能依赖于两个 @Singleton 范围的组件,但我的服务中需要它们,并且都需要是 @Singleton.

有没有更好的选择来做同样的事情?

最佳答案

请注意,尽管您可能有多个标记为 @Singleton 的组件,但它们的生命周期将遵循您保留组件引用的类的生命周期。

这意味着如果您在 Activity 中初始化并保留 NetComponentRepositoryComponent,它将遵循该 Activity 的生命周期,并且不会真正成为应用程序单例。

因此,在 Android 应用程序中您可能不需要多个 @Singleton 组件。考虑将您的两个 Singleton 组件组合成一个组件,如下所示:

@Component(modules = {AppModule.class, NetModule.class, RepositoryModule.class})
@Singleton
public interface AppComponent {
GoogleApiClient getGoogleApiClient();

DatabaseService getDatabaseService();
}

然后确保在应用程序级别保留此 @Singleton 组件,并使其可用于在 Fragment 或 Activity 级别初始化的依赖组件。

public class MyApp extends Application {

private final AppComponent appComponent;

@Override
public void onCreate() {
super.onCreate();
appComponent = DaggerAppComponent.builder()
//modules if necessary
.build();
}

public AppComponent getAppComponent() {
return appComponent;
}
}

请注意,只要您的 @FragmentScoped 本身没有任何依赖组件,您仍然可以根据需要创建任意数量的此类组件。

请注意,即使一个组件现在注入(inject)了 GoogleApiClientDatabaseService,您仍然可以实现关注点分离,因为它们是在单独的 Dagger 2 模块中提供的。

关于android - Dagger 2 : Component depends on more than one scoped component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40910932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com