dagger2使用

目录

1.基本使用(不带module)

2.简单使用(带moudle)

3.一个component多moudle

4.moudle之间依赖


1.基本使用(不带module)

首先我们需要一个component进行桥梁,将@Inject 的对象自动装入其中,然后提供给activity使用。

/**
 * AppComponent @Inject实例对象 和 activity的桥梁
 */
@Component
public interface AppComponent {
    void inject(MainActivity activity);
}

@Inject提供实例对象

public class User {

    public String name;
    @Inject
    public User(){
        name = "mmm";
    }
}

最后在activity中,进行装入:

    @Inject
    User mUser;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DaggerAppComponent.create().inject(this);
        toastUtils.toast(this);
    }

2.简单使用(带moudle)

如果是项目中的工具类,使用第一种方式很好处理,但是当我们使用第三方库的时候,就没有办法直接给Okhttp的构造函数上添加@Inject注解。这个时候我们需要使用moudle类进行中间处理。

public class OkHttp {

    public void getNet(){
        Log.i("OkHttp","请求网络");
    }
}

module直接new出第三方对象

/**
 * Module 模块 主要是用来直接new出我们要使用
 * 但是无法在构造函数行添加 @Inject 的实例
 * 
 */
@Module
public class AppMoudle {

    @Provides
    OkHttp provideOkHttp(){
        return new OkHttp();
    }
}

然后在component中添加modle,放入其中

/**
 * AppComponent @Inject实例对象 和 activity的桥梁
 */
@Component(modules = AppMoudle.class)
public interface AppComponent {
    void inject(MainActivity activity);
}

 

3.一个component多moudle

@Component(modules = {AppMoudle.class,HttpMoudle.class})
public interface AppComponent {

    void inject(MainActivity activity);
}

当AppComponent类有两个modules的时候,就会同时拥有两个modules类提供的实例对象。

4.moudle之间依赖

@Module(includes = HttpMoudle.class)
public class AppMoudle {

    @Provides
    User provideUser(){
        return new User();
    }
}
@Component(modules = {AppMoudle.class})
public interface AppComponent {

    void inject(MainActivity activity);
}

当AppMoudle中依赖类HttpMoudle后,就可以直接使用HttpMoudle提供的实例了。

 

 

 

 

你可能感兴趣的:(android)