Dagger注入类在Dagger中始终为空

问题描述 投票:0回答:1

我正在尝试将CacheManager的实例注入GetTodoRepository,Dagger可能会成功完成,因为我没有收到任何与Dagger相关的错误。但是当在cacheManager中使用GetTodoRepository时,我得到了NullPointerException

public class GetTodoRepository {

    @Inject
    public CacheManager cacheManager;

    public RetrofitService retrofitService;
    private ResultListener listener;

    public GetTodoRepository(@NonNull ResultListener listener) {
        this.retrofitService = new RetrofitService();
        this.listener = listener;
    }
}

@Module
public class AppModule {

    private Application application;

    public AppModule(Application application) {
        this.application = application;
    }

    @Provides
    @Singleton
    public Context providesApplicationContext() {
        return application.getApplicationContext();
    }

    @Provides
    @Singleton
    public CacheManager provideCacheManager(Context Context) {
        return new CacheManager(Context);
    }

}



@Singleton
@Component(modules = AppModule.class)
public interface TodoComponents {
    void inject(MainViewModel mainViewModel);
    void inject(CacheManager cacheManager);
    void inject(GetTodoRepository getTodoRepository);
    void inject(PostTodoRepository postTodoRepository);
}
java android dagger-2 dagger
1个回答
0
投票

[1)应用程序类中的设置匕首(组件)

public class TodoApplication extends Application {

private static AppComponent components;

@Override
public void onCreate() {
    super.onCreate();
    components = DaggerAppComponent.builder()
            .appModule(new AppModule(this))
            .build();
}


public static AppComponent getAppComponent() {
    return components;
}

}

2)从注入目标类的Component类调用Application对象

public GetTodoRepository(@NonNull ResultListener listener) {
    this.listener = listener;
    TodoApplication.getAppComponent().inject(this);
}
© www.soinside.com 2019 - 2024. All rights reserved.