《Android MVP设计模式最佳实现》,我们在这篇文章的基础上加上Dagger2后应用。为什么要这样做呢?
第一,MVP的结构模式,已让我们获得了一个不错的可维护、易于维护的结构。而用Dagger2而是为了使用我们的程序设计变得更加松耦合。
参考《什么是Dagger2?》

1.创建LoginModule、AppModule:提供注入对象

@Module
public class LoginModule {
    @Provides
    public LoginActivityMVP.Presenter provideLoginActivityPresenter(LoginActivityMVP.Model model){
        return new LoginActivityPresenter(model);
    }
    @Provides
    public LoginActivityMVP.Model provideLoginActivityModel(LoginRepository repository){
        return new LoginModel(repository);
    }
    @Provides
    public LoginRepository provideLoginRepository(){
        return new UserRepository();
    }
}

@Module
public class AppModule {
    private Application application;
    public AppModule(Application application) {
        this.application = application;
    }
    @Provides
    @Singleton
    public Context provideContext() {
        return application;
    }
}

2.定义Component:定义module与注入点所在类的关系

@Singleton
@Component(modules = {AppModule.class, LoginModule.class})
public interface AppComponent {
    void inject(LoginActivity target);
}

3.标记注入点

public class LoginActivity extends AppCompatActivity implements LoginActivityMVP.View{

    @Inject
    LoginActivityMVP.Presenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        // 传入当前对象,才会将module提供的注入对象注入到@Inject注解的变量上。
        ((App)getApplication()).getComponent().inject(this);
//        LoginRepository repository = new UserRepository();
//        LoginActivityMVP.Model model = new LoginModel(repository);
//        presenter = new LoginActivityPresenter(model);
    }
  }

Demo

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐