天天看點

android MVP+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);
    }
  }