天天看点

Dagger2 的简单使用

1.编写module类,module类中定义需要提供的注入对象

@Module
public class HttpModule{

    @Provides
    public HttpObject providerHttp(){
        return new HttpObject();
    }
}
      
@Module
public class PresenterModule{

    @Provides
    MainPresenter getMain(){
        return new MainPresenter();
    }
}
      

2.编写component类,所有需要被注入的类要在这里注册,多个component需要使用在同一个注入对象时,可以使用dependencies或者subComponent。

* 多个component 上面的scope 不能相同
* 没有scope 的组件不能依赖有scope 的组件
* 使用单例时一般要自定义singleTon      
@Component(modules = {HttpModule.class}, dependencies = {PresenterComponent.class})
public interface MyComponent{

    //注入的位置就写在参数上
    void  inject(MainActivity  mainActivity);
    void  inject(SecondActivity mainActivity);
}


@Component(modules = {PresenterModule.class})
public interface PresenterComponent{

    MainPresenter providesPresenter();
}
      

3.使用

DaggerMyComponent.builder().httpModule(new HttpModule()).
presenterComponent(DaggerPresenterComponent.create()).build().inject(this);      

4.subComponent的写法   

@Subcomponent(modules = {PresenterModule.class})
public interface TestSubComponent{

     //注入的位置就写在参数上 
void inject(MainActivity mainActivity);
                         
 void inject(SecondActivity mainActivity);
}
      
@Component(modules = {HttpModule.class})
public interface MainComponent{

    TestSubComponent getTestSubComponent();
}

      
DaggerMainComponent.create().getTestSubComponent().inject(this);