cannot be provided without an @Provides- or @Produces-annotated method.

今天 用dagger2 的时候编译总出来这个问题 ,查看了好多时间,才发现问题 ,其实都不是问题,是我自己的粗心大意。。。。。

问题的意思呢 就是 有一个类型 dagger找不到 怎么给他生成。 我的问题是说AppTwoContract.Presenter这个dagger找不到地方给她生成,可我明明定义有的

 @Provides
    @AppTwo
    public  AppTwoContract.Presenter provideAppTwoPresenter(MainModel mainModel){
        return new AppTwoPresenter(mainModel);
    }

后来检查了好长时间,猜想 难道是申明作用范围的问题?,把@AppTwo 去掉后, 然后把下面的@AppTwo就好了

@AppTwo
@Subcomponent(modules = {AppTwoModule.class})
public interface AppTwoComponent {
    void inject(AppTwoFrag appTwoFrag);
}

我细看了一@AppTwo的代码 原来 下面的@Qualifier错了 这个注解是用来标识的,不是用来申明范围的。。。。

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface AppTwo {
}

改成@Scope后 rebuild一下通过

@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface AppTwo {
}

这个问题本质上 就是我粗心大意 和刚使用dagger导致的,,,,, 大家 以后 不要像我一样。。

要特别记住 @Qualifier 是自定义标识,是和@Module里面的@Provides一起用,还有在注入字段的时候 和@Inject 一起使用。

@Scope 是申明作用范围,是和@Module里面的@Provides一起用,还有在@Subcomponent或@Component 一起使用。

这里不能张冠李戴。

猜你喜欢

转载自blog.csdn.net/a1064072510/article/details/82321362
今日推荐