码迷,mamicode.com
首页 > 其他好文 > 详细

dagger2记录篇

时间:2016-09-30 14:49:55      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

作为一个码农,什么都不用多讲,贴代码

build project

技术分享

build module

技术分享

技术分享

技术分享

Application

技术分享
public class App extends Application {

    private AppComponent appComponent;

    @Override public void onCreate() {
        super.onCreate();

        appComponent= DaggerAppComponent.builder()
                .appModule(new AppModule(this))
                .build();
    }

    public AppComponent getAppComponent() {
        return appComponent;
    }

}
View Code
AppComponent
技术分享
@Singleton
@Component(modules = { AppModule.class })
public interface AppComponent {

    @ContextLife("Application")
    App getApplication();

    RetrofitHelper retrofitHelper();  //提供http的帮助类

}
View Code
AppModule
技术分享
@Module
public class AppModule {
    private App application;

    public AppModule(App application){
        this.application=application;
    }

    @Provides
    @Singleton
    @ContextLife("Application")
    public App provideApplication(){
        return application;
    }


    @Provides
    @Singleton
    public RetrofitHelper provideRetrofitHelper() {
        return new RetrofitHelper();
    }

}
View Code
ActivityComponent
技术分享
@ActivityScope
@Component(dependencies = AppComponent.class, modules = ActivityModule.class)//关联上下
public interface ActivityComponent {

    Activity getActivity();

    void inject(LoginActivity loginActivity);//要在类中使用注入功能
    void inject(MainActivity mainActivity);

}
View Code
ActivityModule
技术分享
@Module
public class ActivityModule {


    private Activity mActivity;

    public ActivityModule(Activity activity) {
        this.mActivity = activity;
    }

    @Provides
    @ActivityScope
    public Activity provideActivity() {
        return mActivity;
    }

    @Provides
    @ActivityScope
    public IPresenterFactory providePresenter(RetrofitHelper retrofitHelper) {
        return new PresenterFactory(retrofitHelper);
    }

}
View Code

Base里面使用注入,否则无法注入

技术分享
public abstract class PresenterActivity extends BaseActivity {

    private final static String TAG = "PresenterActivity";

    protected abstract void initInject();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initInject();
    }

    protected ActivityComponent getActivityComponent(){
        return  DaggerActivityComponent.builder()
                .appComponent(App.getInstance().getAppComponent())
                .activityModule(getActivityModule())
                .build();
    }

    private ActivityModule getActivityModule() {
        return new ActivityModule(this);
    }

}
View Code

此时前提条件都有了

点击运行自动生成注入代码(没问题的前提)

使用注入:

public class MainActivity extends PresenterActivity {

    @Inject
    protected IPresenterFactory mPresenter;//没有创建对象,inject标签注入类型

    private final int BASIC_PERMISSION_REQUEST_CODE = 100;
    private TextView username;

    @Override
    public void findView() {
        username = findView(R.id.username);
        username.setText(App.getInstance().getUserEntity().getName()+" hello");
    }

    @Override
    public void init() {
        if (mPresenter != null){
            Toasts.showShort("mPresenter success",context);//注入成功会打印出success
        }
    }

    @Override
    public int layoutResID() {
        return R.layout.activity_main;
    }

    @Override
    protected void initInject() {
        getActivityComponent().inject(this);
    }


    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent() {
        Toasts.showShort("刷新UI",context);
    }

}

 

dagger2记录篇

标签:

原文地址:http://www.cnblogs.com/LiuZhen/p/5923387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!