以咖啡壶为栗子:
一般来说 咖啡壶 中 有 加热器 ,这样才能加热
先写一个简单的类
Heater 加热器类
public class Heater {
@Inject //在需要手动注入时,会调用被 @Inject 的方法 来生成 Heater
public Heater() {
}
public void on() {
Log.e("on", "开始烧开水啦");
}
public void off() {
Log.e("off", "关闭加热器");
}
}
Kettle 咖啡壶类
注意,咖啡壶 依赖于 加热器
public class KettleBean {
private HeaterBean heater1; //注意这两个 不同的写法 ,这个可以设置为私有
@Inject
HeaterBean heater2; //这个不能被设为私有的
@Inject
public KettleBean(HeaterBean heater1) {
this.heater1 = heater1;//自动注入 heater1
DaggerKettleComponent.create().inject(this);//手动注入heater2,如果没有这一句,heater2 将会是空 ,这里实际上是调用 KettleComponent中的 void inject(Kettle kettle)
}
public void on() {
if (heater1 != null)
heater1.on();
if (heater2 != null)
heater2.on();
}
}
接着 创建 Module 提供 依赖
@Module()
public class KettleModule {
@Provides //提供 咖啡壶
Kettle providesKettles(Heater o1){
return new Kettle(o1);
}
@Provides //提供 加热器
Heater providesHeater(){
return new Heater();
}
}
然后,创建 Component
@Component(modules={KettleModule.class}) //Component 将会从这个类中获得 咖啡壶,加热器
public interface KettleComponent {
void inject(MyActivity myActivity); //将 咖啡壶 注入到 Activity
void inject(Kettle kettle);//将 加热器 注入 咖啡壶
}
在Activity中
public class MyActivity extends Activity {
@Inject
Kettle kettle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inject();
}
private void inject() {
//这里实际上是调用 KettleComponent中的 void inject(MyActivity myActivity)
DaggerKettleComponent.create().inject(this);
kettle.on();
}
运行会看到:
参考:http://www.data321.com/91ff11c3.html
此外,貌似还有一种实现多重依赖的方法,但是我尝试了没有成功,这里贴出来给大家参考一下:
http://www.mobile-open.com/2015/43085.html