美文网首页
Dagger2初级使用

Dagger2初级使用

作者: 艾斯乀 | 来源:发表于2018-04-08 14:30 被阅读14次

    作者本人写这文章,纯属扯淡,以及方便日后观看.请看官莫扔砖....

    1.Dagger2是社么

    简单说: 以注入的方式方便开发的一个框架(这也太简单了)

    2.怎么用
    第一步
    创建XXXComponent接口,XXX代表具体注入功能的功能类型,比如UserComponent

     @Singleton
     @Component(modules = {MainModule.class})
      public interface UserComponent {
              void inject(MainActivity activity);
      }
      //其中@Singleton表示单例模式
      //@Component的作用是告诉dagger匹配实体类或者功能类的构造函数,这个一定是一个接口.
      //(modules = {MainModule.class})代表按照一定规则进行匹配,为了适应有多个构造函数的类.
      //void inject(MainActivity activity)表示要注入的位置,类型就是注入的位置.
    

    第二步
    配置MainModule.class(就是上面写在@component后面的那一坨)

    @Module
    public class MainModule {
    
        @Named("AA")
        @Provides
        @Singleton
        User provideUser() {
            return new User("test");
        }
    
        @Named("BB")
        @Provides
        @Singleton
        User providerUserNothing(){
            return new User();
        }
    }
    

    这里我是按照named来区分的,Dagger有多种区分方式,还包括数字区分,但是原都记本一致.

    第三步
    生成处理类,dagger会根据第一步和第二步的配置来生成操作类,但是我们需要先make module一下才可以哦,
    在Android studio中 build ->make module app

    第四步
    使用注解,并且初始化注入,使用

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private Button btn_main;
        @Named("AA")
        @Inject
        User user1;
    
        @Named("BB")
        @Inject
        User user;
    
        @Inject
        Debugger mDebugger;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            DaggerUserComponent.builder().build().inject(this);
            btn_main = findViewById(R.id.btn_main);
            btn_main.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.btn_main:
                    Log.e("ddd", user1.getName());
                    Log.e("ddd", user.getName());
                    break;
            }
        }
    }
    

    我们这里只是写了个点击事件来触发测试,所以不要在意那些细节

    经过第一、二、三步之后,我们还需要在Oncreat中初始化一下操作类就可以使用了,这个操作类是自动生成的,而且在工程目录中是查询不到的,但是可以直接使用.
    方法如下

    DaggerUserComponent.builder().build().inject(this);
    

    名字实际上就是"DaggerXXXCompoment"......
    接下来就是

    @Named("AA")
    @Inject
    User user1;
    

    接下来这一段了, 已经可以直接使用了~~~

    相关文章

      网友评论

          本文标题:Dagger2初级使用

          本文链接:https://www.haomeiwen.com/subject/ubyphftx.html