继续上文
上篇我们基础的使用了Dagger 那么这次扩展下,现在要求来了 HttpService 需要传入一个Context 作为构造函数,而且还想这个Context 还有由Dagger来提供
public class HttpService{
Context mContext;
@Inject
public HttpService(Context context){
mContext = context;
}
}
但是这个Context 实际还是由我们来注入,但是我们知道activity就提供context 那么我们可以通过注入activity 到component中
那么这个 component 就需要 扩展出一个module来keep住,并提供出这个activity
@Module
public class ActivityModule {
Activity mActivity;
public ActivityModule(Activity activity) {
mActivity = activity;
}
@Provides
Activity getActivity() {
return mActivity;
}
@Provides
Context getContext(){
return mActivity;
}
}
把Module 加入到Component中
@Component(modules={ServiceModule.class,ActivityModule.class})
public interface ActivityComponent{
void inject(MainActivity activity);//参数必须是 MainActivity 类型,如果你要其他activity 也必须明确到 那个类,因为在运行时的时候 是通过 反射 来注入的,所以这个需要找这个类下需要注解的东西
Activity activity();
Context context();
//HttpService httpService()//由于HttpService 已经在构造函数中 Inject了这里不用再提供了
}
activity 构建component
public class MineActivity extends Activity{
@Inject //标致 这个由Dagger 注入
HttpService mHttpService;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupComponent(this)
....
mHttpService.doPost("http://a.com");
....
}
void setupComponent(Activity activity){
DaggerActivityComponent.builder().build().activityModule(new ActivityModule(this)).inject(this);//把当前的activity 丢进Component 让他自动注入给 mHttpService
}
}