Dagger2

dependencies:

一个component可以通过此注解依赖另外一个component,但是所依赖的component中必须要提供所要使用的modules中provide所注解的方法,并且返回值相同,如果其中有named注解的方法 这里的返回值为void,如果依赖的component有@signton标注,依赖者必须自定义一个signton标注并放在上面,例如:

被依赖者

@Singleton @Component(modules = { ActivityModel.class, TagModel.class })public interface ActivityComponent {  StringgetMyString();  LocalUsergetLoca();  ApiUsergetABC();  UtilsgetUtils();}

moudle

@Module public class TagModel {@Provides public UtilsgetUtils() {return new Utils();  }}

依赖者

@Single@Component(dependencies = ActivityComponent.class)public interface OneComponent {void inject(MainActivity mainActivity);}

application中使用

public class MyApplicationextends Application {private ActivityComponentActivityComponent;  @Override public void onCreate() {super.onCreate();    ActivityComponent = DaggerActivityComponent.builder()        .activityModel(new ActivityModel("oko"))        .tagModel(new TagModel())        .build();  }public ActivityComponentgetModel() {return ActivityComponent;  }}

activity中使用  DaggerOneComponent.builder().activityComponent(((MyApplication)getApplication()).getModel()).build().inject(this);

使用构造方法进行注解的时候一定要注意  注解的地方要在当前使用的DaggerBeanComponent.create().inject(this)的activity或者他的子类中使用,不能在父类中使用

通过构造方式注解的例子

由这三步可以知道  通过构造方式注解根本就与module没得关系  在你需要的对象构造方法中加上@inject    在你需要对象的类中@inject类  中间只需要写一个component来把这个需要对象的类连接起来就行了

你可能感兴趣的:(Dagger2)