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);
        }
    
    }
  • 相关阅读:
    2018-04-27 搭建Python官方文档翻译环境-汉化示例代码
    2018-04-21 搭建Python官方文档翻译环境
    2018-01-19 Xtext试用: 5步实现一个(中文)JVM语言
    2018-02-27 "Literate Programming"一书摘记之一
    2018-02-18 Antlr4实现简单语言之条件语句
    2018-02-17 中文代码示例[译]Scala中创建隐式函数
    2018-02-16 中文代码示例之冒泡算法, 后感
    C code example for strdup
    Hash table: why size should be prime?
    Hash table lengths and prime numbers
  • 原文地址:https://www.cnblogs.com/LiuZhen/p/5923387.html
Copyright © 2011-2022 走看看