第一种
//需要注入的对象
public class AObject {
@Inject
public AObject() {
}
public void eat() {
System.err.println("我是A");
}
}
component 注意:
@Component不能省略
@Component
public interface MainComponent {
//第三步 绑定activity
void inject(DaggerTestActivity activity);
}
activity,使用@Inject
引入AObject 就可以直接使用,不用再new了。
public class DaggerTestActivity extends BaseActivity {
@Inject
AObject aObject;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dagger_test);
initView();
}
private void initView() {
//DaggerMainComponent是dagger2自动生成的一个类
DaggerMainComponent.builder()
.build()
.inject(this);
aObject.eat();
}
}
第二种
这种适用于第三方库,需要使用的对象无法添加@Inject
//需要注入的对象(第三方库中的)
public class BObject {
public BObject() {
}
public void eat() {
System.err.println("哈哈 我是B");
}
}
需要新建一个Module
,使用@Module注解;Provides提供BObject 对象
@Module
public class MainModule {
@Provides
BObject providerB() {
return new BObject();
}
}
Component中指定Module
@Component(modules = {MainModule.class})
public interface MainComponent {
//绑定activity
void inject(DaggerTestActivity activity);
}
Activity
public class DaggerTestActivity extends BaseActivity {
@Inject
BObject bObject;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dagger_test);
initView();
}
private void initView() {
DaggerMainComponent.builder()
.mainModule(new MainModule())
.build()
.inject(this);
bObject.eat();
}
}