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);
}
}