Skip to content

复用的Presenter 注入简单示例 #181

@Sum41forever

Description

@Sum41forever

复用有2种方式。

  1. 复用通用的 Module,注入用原始的 Component。
  2. 使用依赖 Component 的方式重用 Component

复用通用的 Module

UserActivity 中注入通用 P

通用的 P 命名为 GirlPresenter, 逻辑就是发起一个请求
UserActivity 中注入通用 P
UserComponent 中要多添加一个通用的 Module
UserComponent 中要多添加一个 Module

GirlModule 提供通用的 P 需要的对象

GirlModule.class

GirlPresenter

GirlPresenter.class

GirlContract

GirlContract.class

Model 的实现基本和 DEMO 中 UserModel 相同这里就不多写了


GirlPresenter 测试情况

通用的 P 发起请求并且成功回调
通用的 P 发起请求
请求回调
请求回调2

使用依赖 Component 的方式重用 Component

@ActivityScope
@Component(modules = {UserModule.class},dependencies = AppComponent.class)
public interface UserComponent {
    TestComponent plus(TestModule testModule);
}
@TestScope //注意 Scope不同!!!不同 Component 的 Scope 不能相同
@Subcomponent(modules = {TestModule.class}) //要用@Subcomponent
public interface TestComponent {
    void inject(UserActivity activity);
}
@Module
public class TestModule {
    private TestContract.View view;
    public TestModule(TestContract.View view) {
        this.view = view;
    }
    @TestScope  //注意所有相关的 Scope 都要用 @TestScope
    @Provides
    TestContract.View provideTestView() {
        return this.view;
    }

}
    @Inject
    TestPresenter mTestPresenter;
    UserComponent userComponent;

    @Override
    public void setupActivityComponent(AppComponent appComponent) {
        userComponent = DaggerUserComponent
                .builder()
                .appComponent(appComponent)
                .userModule(new UserModule(this))
                .build();

        //通用的 TestComponent 的注入,这里 plus 后返回的对象类型是 TestComponent
        userComponent.plus(new TestModule(this)).
                inject(this);

        mTestPresenter.requestUsers(true);
        mPresenter.requestUsers(false);
    }

Module 和 Component 都用通用的

2 个 P 的回调方法都调用了的,这里就不截图了。
因为用了不同的Component,Scope 不能相同!!!带了 Scope 以后,Module,Model 等都需要新的 Scope,这就不是很方便。个人认为维护和阅读都不是很舒服,你想想一个 Acitivity 里面基类的主 Presenter 的 Scope 是一个,通用的 Presenter 的 Scope 是一个,感觉生命周期可能会出问题,这一点没深入研究,只提出自己的想法,欢迎讨论。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions