- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
从此处查看 Android 架构蓝图“todo‑mvp‑dagger”:https://github.com/googlesamples/android-architecture .
我试图了解 Dagger2 的实现,但我似乎无法弄清楚他们如何让 Dagger2 提供 TasksRepository。
他们有 @Provides
用于“provideTasksLocalDataSource”和“provideTasksRemoteDataSource”,但实际的 TaskRepository 在哪里?
在 TodoApplication 类中,他们有这个:
@Inject
TasksRepository tasksRepository;
它如何在没有@Provides 的情况下将它注入(inject)到任何地方?
如果我尝试在我自己的应用程序中使用相同的方法,我会收到此错误:
cannot be provided without an @Provides- or @Produces-annotated method
所以我到处查看蓝图代码,但我看不到他们自己是如何做到的。是否有一些技巧可以让他们没有 @Provides
?它肯定会构建,所以他们已经以某种方式绕过了它。
有人在实际的 github 页面上问过同样的问题,但在撰写本文时没有答案。 https://github.com/googlesamples/android-architecture/issues/561 .
我正在进行最新的提交,在撰写本文时是“082bd72d62472f9caadd2979046067fb928bbfef”。
最佳答案
在您提到的存储库中,Dagger 2 知道如何注入(inject) TasksRepository
通过标有 @Inject
的构造函数.来自source :
@Inject
TasksRepository(@Remote TasksDataSource tasksRemoteDataSource,
@Local TasksDataSource tasksLocalDataSource) {
mTasksRemoteDataSource = tasksRemoteDataSource;
mTasksLocalDataSource = tasksLocalDataSource;
}
由于构造函数被注释为 @Inject
, Dagger 2 将尝试使用构造函数注入(inject) TasksRepository
像TodoApplication
这样的消费者.
自 TasksDataSource
已经绑定(bind)在TasksRepositoryModule
有足够的信息让 Dagger 2 执行注入(inject)而无需额外的负担 @Provides
或 @Binds
方法。
同样,您可以执行以下操作:
class Foo {
private final Bar bar;
@Inject
Foo(Bar bar) {
this.bar = bar;
}
}
class Bar {
@Inject
Bar() {}
}
class Activity extends AppCompatActivity {
@Inject Foo foo;
}
而 Dagger 2 将能够注入(inject) Foo
里面AppCompatActivity
.为什么?
Bar
对象(通过调用空构造函数)Foo
的实例时知道它必须使用注释为 @Inject
的构造函数使用单个参数 Bar
.Foo
没有其他依赖关系,换句话说,完整的对象图可用。关于java - Android Architecture Blueprints "todo‑mvp‑dagger",@Provides for TasksRepository 在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50869969/
正在复制的问题是,当sew呈现登录页面时,然后我们继续执行身份验证,现在将我们重定向到网站的仪表板,此时我们继续关闭会话,并且在之前的交互中生成的这些cookie没有被删除。这个问题是重复性的,并且一
我是 Flutter 的新手,目前正在研究 DI。 我正在使用 flutter_bloc 和 provider 包。 flutter_bloc 附带一个 RepositoryProvider,我现在问
我是 Flutter 的新手,目前正在研究 DI。 我正在使用 flutter_bloc 和 provider 包。 flutter_bloc 附带一个 RepositoryProvider,我现在问
我正在使用 Angular2 开发一个应用程序。 我正在尝试在我的应用程序中使用 Reactive Forms,但我遇到了一些错误: 第一个错误是关于 NgControl 的,如下所示: No pro
最近很多用户在使用电脑的时候发现了wmi provider host进程占用内存比较大,不知道这个进程到底是干什么的,能不能禁止,怎么禁止。下面来一起看看想想的介绍吧。 wmi provide
我的问题是: 当我在设计时不知道这些表达式的数量和类型时,如何将列表中的表达式拼接成一个引用? 在底部,我包含了类型提供程序的完整代码。 (我已经剥离了这个概念来证明这个问题。)我的问题出现在这些行:
我目前正在学习使用 Flutter 进行应用程序开发,并已开始学习 Provider 包。我遇到了一些困难并收到错误: “在此...小部件之上找不到正确的提供者” 我最终移动了 Provider 小部
我是 android 的新手,我正在学习如何使用 JavaMail API 发送电子邮件的教程,我已经正确添加了必要的 Jar,但我总是遇到无法解析 GmailSender 类上的符号提供程序,我尝试
我正在我的 Angular 应用程序中进行单元测试,我正在使用 TestBed 方法, 我正在测试组件,所以每个规范文件看起来像这样 import... describe('AppComponent'
enter image description here 代码:这是我的 index.js 文件 index.js import { Provider } from "react-redux"
Microsoft ASP.NET Universal Providers 1.1昨天与System.Web.Providers 1.2一起发布.在后面的 nuget 页面上声明:Legacy pac
在我的 Next js 项目中,我使用了 Next auth,其中 import {Provider} from 'next-auth/client' , 并包裹 在 _app.js 中。 但是,与此
当我在 View 模型中使用如下界面时 class MainViewModel @ViewModelInject constructor( private val trafficImagesR
更新 - 我实际上发现它是 Flutter Issue . 我有两个 Provider,一个是 EntriesProvider,另一个是 EntryProvider。我在创建条目时使用我的 Entry
function configure($provide, $injector) { $provide.provider("testservice", function () {
这真让我抓狂。我似乎无法弄清楚这有什么问题。 代码: public interface IMinutesCounter { void startTimer(); void stopTi
我在我的项目中玩 Dagger 2,然后我陷入了这个错误编译。-> Error:(18, 21) error: ....MyManager cannot be provided without an
我有一个 Resteasy 应用程序,它使用 Spring 并包含 ContainerRequestFilter 和 ContainerResponseFilter 实现,并用 @Provider 注
我正在尝试使用 Dagger2 设置一个新项目,我以前使用过 Dagger2,但现在我正在尝试自己从头开始设置它。我正在从我参与的 Kotlin 项目中获取示例,但无法像现在在 Kotlin 中一样为
我刚开始学习 dagger2,遇到了一个奇怪的问题,在我看来像是一个错误。这是模块: @Module public class SimpleModule { @Provides Coo
我是一名优秀的程序员,十分优秀!