Dagger2+MVP

来源:互联网 发布:恋夜秀场源码 编辑:程序博客网 时间:2024/06/04 00:24

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对应代码:

@Modulepublic 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>



原创粉丝点击