gpt4 book ai didi

java - Dagger 2 - 构造函数注入(inject) - 作用域

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

我正在使用具有简单 MVP 模式的 Dagger 2。我有一个 @PerApp@PerActivity 作用域。我正在使用构造函数注入(inject)来注入(inject)演示者依赖项,这使得这些演示者“可注入(inject)”(我不需要在 Activity 模块中编写提供方法)。代码 fragment :

每个应用:

// AppComponent
@PerApp
@Component(modules = {AppModule.class, DataModule.class, NetworkModule.class})
public interface AppComponent {
LoginComponent plus(LoginModule loginModule);

MainComponent plus(MainModule mainModule);
}

// Example @PerApp module
@Module
public class NetworkModule {

@Provides
@PerApp
Retrofit providesRetrofit(){
...
}
}

PerActivity:

// LoginModule
@Module
public class LoginModule {
private final LoginActivity mLoginActivity;

public LoginModule(LoginActivity loginActivity) {
mLoginActivity = loginActivity;
}

@Provides
@PerActivity
Context providesContext() {
return mLoginActivity;
}
}

// LoginComponent
@PerActivity
@Subcomponent(
modules = LoginModule.class
)
public interface LoginComponent {
void inject(LoginActivity loginActivity);
}

Activity :

public class LoginActivity {
@Inject LoginPresenter mPresenter;
}

主持人:

public class LoginPresenter {

@Inject
public LoginPresenter(Retrofit retrofit) {
...
}
}

效果很好。我的问题是:所提供的 LoginPresenter 的范围是什么?它会和 LoginActivity 一样吗?我应该用 @PerActivity 或其他东西来注释演示者的构造函数吗?

最佳答案

我已经运行了一些测试来自行检查作用域如何与构造函数注入(inject)一起工作,这是我的结果。

1) 将LoginPresenter注入(inject)LoginActivity:

LoginComponent - @PerActivity 范围 (代码与我第一篇文章中的代码完全相同)

我尝试将演示者注入(inject) 2 个变量:

public class LoginActivity {
@Inject LoginPresenter A;
@Inject LoginPresenter B;
}

LoginPresenter 注释为:

  • nothing - AB 不同
  • @PerActivity - AB 相同
  • @PerApp - AB 相同

2) 将LoginPresenter注入(inject)LoginActivityMainActivity:

LoginComponent, MainComponent - @PerActivity scope (代码与我第一篇文章中的完全一样) .

我尝试将演示者注入(inject)到 2 个不同的 Activity 中:

public class LoginActivity {
@Inject LoginPresenter A;
}

public class MainActivity {
@Inject LoginPresenter B;
}

LoginPresenter 注释为:

  • nothing - AB 不同
  • @PerActivity - AB 不同
  • @PerApp - AB 相同

关于java - Dagger 2 - 构造函数注入(inject) - 作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36447251/

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