zoukankan      html  css  js  c++  java
  • dagger2记录篇

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

    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);
        }
    
    }
  • 相关阅读:
    《Think Python》第7章学习笔记
    Arrays和String单元测试
    结对编程项目-四则运算 第二周
    2018-2019-2 20175227张雪莹《Java程序设计》 实验二《Java面向对象程序设计》
    类定义
    20175227张雪莹 2018-2019-2 《Java程序设计》第六周学习总结
    结对编程项目-四则运算 第一周 阶段性总结
    迭代和JDB
    20175227张雪莹 2018-2019-2 《Java程序设计》第五周学习总结
    结对学习小组
  • 原文地址:https://www.cnblogs.com/LiuZhen/p/5923387.html
Copyright © 2011-2022 走看看