Android--Dagger2+MVP

1,添加dependences{

 

compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
 
compile 'com.google.dagger:dagger:2.6'
annotationProcessor 'com.google.dagger:dagger-compiler:2.6'

 

 

 

}

 

2,代码结构:

                    --DaggerDemo
                           --di
                               --DaggerModule
                               --DaggerComponent
                           --mvp
                               --DaggerModel
                               --DaggerView
                               --DaggerPresenter
                           --DaggerActivity

 

 

 

3, DaggerView对应代码:

 

public interface DaggerView {
    void showText(String s);
}

4, DaggerModel对应代码:

public class DaggerModel {
    public static String getText(){
        return "hello";
    }
}

5,DaggerPresenter对应代码:

 

 

public class DaggerPresenter {
    DaggerView mDaggerView;

    @Inject
    public DaggerPresenter(DaggerView daggerView){
        mDaggerView=daggerView;
    }

    public void showText(){
        mDaggerView.showText(DaggerModel.getText());
    }
}


6,DaggerActivity对应代码:

 

 

public class DaggerActivity extends AppCompatActivity implements DaggerView {

    @BindView(R.id.text1)
    TextView mTextView;
    @Inject
    DaggerPresenter mDaggerPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dagger);

        ButterKnife.bind(this);

        DaggerDaggerComponent.builder()
                .daggerModule(new DaggerModule(this))
                .build()
                .inject(this);
//        mDaggerPresenter=new DaggerPresenter(this);


        mDaggerPresenter.showText();

    }

    @Override
    public void showText(String s) {
        mTextView.setText(s);
    }
}


说明:Presenter里的构造方法的@Inject可看作依赖注入的依赖对象,而Activity中成员变量的@Inject可看作依赖注入的注入目的地,两者通过@Component 实现注入

7,DaggerModule对应代码:

 

 

@Module
public class DaggerModule {
    private final DaggerView mDaggerView;

    public DaggerModule(DaggerView daggerView){
        mDaggerView=daggerView;
    }

    @Provides
    DaggerView provideDaggerView(){
        return mDaggerView;
    }
}

 

8,DaggerComponent对应代码:

 

 

@Component(modules = DaggerModule.class)
public interface DaggerComponent {
     void inject(DaggerActivity daggerActivity);
}


说明:实际上 ,dependency injector只是取代new方法

 

具体步骤:1,先在需要注入依赖的class里声明成员变量并使用@Inject标注

                  2,@Module中的@Providers提供的对像 和 @Inject标注的对象的构造方法   都可以提供依赖(相当于注射剂),前者优先

                 3,@Component负责从中寻找<1>中所需对象,如果在注射剂中寻找的对象有依赖对象,则重复<2><3>

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值