Dagger2 的简单使用 (一)

以咖啡壶为栗子:
一般来说 咖啡壶 中 有 加热器 ,这样才能加热
先写一个简单的类
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值