gpt4 book ai didi

java - 了解 Dagger2 流程(提供的示例)

转载 作者:行者123 更新时间:2023-11-30 01:15:30 24 4
gpt4 key购买 nike

我正在尝试在我的项目中使用 Retrofit、RxJava、MVP 实现 Dagger 2。然而,我是从阅读指南和观看视频开始的,就在我认为我理解它是如何工作的时候,似乎我没有。 Here是我试图理解的示例。

模块:

@Module
public class AppModule {
private App app;

public AppModule(App app) {
this.app = app;
}

@Provides @Singleton public SharedPreferences provideSharedPreferences() {
return PreferenceManager.getDefaultSharedPreferences(app);
}

@Provides @Singleton public HelloModel provideHelloModel(SchedulerProvider schedulerProvider,
HelloDiskCache helloDiskCache, HelloService helloService, Clock clock) {
return new HelloModel(schedulerProvider, helloDiskCache, helloService, clock);
}

@Provides public HelloDiskCache provideHelloDiskCache(SharedPreferences prefs) {
return new HelloDiskCache(prefs);
}

@Provides public HelloService provideHelloService() {
return new HelloService();
}

@Provides public SchedulerProvider provideSchedulerProvider() {
return SchedulerProvider.DEFAULT;
}

@Provides public Clock provideClock() {
return Clock.REAL;
}

@Provides @Nullable public LayoutInflaterFactory provideLayoutInflaterFactory() {
return null;
}

组件

@Component(
modules = AppModule.class
)
@Singleton
public interface AppComponent {
HelloModel getHelloModel();
HelloDiskCache getHelloDiskCache();
MainActivity inject(MainActivity activity);
HelloFragment inject(HelloFragment fragment);
}

在 fragment 中,presenter 被注入(inject)(这是从哪里来的?)

  @Inject HelloPresenter presenter;

在presenter中,有一个构造函数注入(inject)

  @Inject HelloPresenter(HelloModel helloModel) {
this.model = helloModel;

那么,为什么我们可以在 fragment 中注入(inject)一个演示者,为什么我们可以在演示者中注入(inject)呢?答案不必非常详尽我只是觉得很愚蠢,因为我无法追踪它的来源。

最佳答案

@Inject 注释构造函数是 @Provides 注释方法的替代方法,用于在没有太多配置要做的情况下用于依赖项。

由于 HelloPresenter 有这样的构造函数,Dagger 会自动发现它并能够注入(inject)这种依赖关系或使用它来构造和提供图中的其他对象。

具有 @Inject 注释的构造函数的类本身可以使用范围注释进行注释(例如,@Singleton)。在这种情况下,只有具有匹配范围的组件才能看到它。

一般来说,这种提供依赖性的方式不那么冗长,但您并不总是可以使用它(例如,ActivitySharedPreferences)。在这种情况下,您必须使用 @Module@Provides 方法。

关于java - 了解 Dagger2 流程(提供的示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37922335/

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