问题标签 [assisted-inject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
152 浏览

android - 工人类上的 ClassNotFoundException

我在生产中遇到了很多奇怪的错误,这些错误只发生在少数用户身上,所以 99% 的用户都没事。

这是 TranslationWorkerFactory 的代码。我正在使用匕首辅助注入将依赖项注入工作类。

我不知道为什么会这样。工作人员所做的是下载并解析大型 json,因此这可能是引发异常的原因,但这只是我的猜测是否可能相关。

有人知道发生这种情况的原因吗?

谢谢

0 投票
1 回答
168 浏览

android - 在 sharedViewModel 上调用 .observe() 时,Android ViewModel 没有零参数构造函数

我有以下课程:

视图模型

父片段:

以及通过 viewpager 附加到父片段的子片段

的呼唤

导致以下错误:Cannot create an instance of class MealPlanViewModel has no zero argument constructor

但是,如果我不使用 AssistedInject 在父片段中创建 ViewModel 并像下面这样实例化它,我不会在子片段中得到“没有零参数构造函数”。

关于为什么会这样以及如何在仍然使用 AssistedInject 的同时解决这个问题的任何想法?

0 投票
0 回答
61 浏览

interface - Dagger2 内置的 AssistedInject 如何支持返回接口而不是类的工厂

我正在研究 Dagger2 及其内置的 AssisedInject 注释。dagger.dev上提供的教程显示了一个示例,其中工厂方法返回一个具体类,但我希望工厂返回一个接口,该接口在某些模块中定义了实现绑定。

例如,在 Google Guice 中,我可以使用工厂模块构建器创建一个模块,以将接口和实现联系在一起:

Dagger2 AssistedInject 不可能吗?我对 Dagger 很陌生,也许我当时误解了这个概念。很感谢任何形式的帮助!

0 投票
1 回答
871 浏览

java - ViewModel 构造函数应该用@Inject 注释而不是@AssistedInject

我想在运行时使用 Hilt 为 ViewModel 提供一些依赖项。我遵循了 d.android.com this指导的解决方案。

但是,仍然收到构建错误ViewModel constructor should be annotated with @Inject instead of @AssistedInject.

我正在使用刀柄版本 2.38.1 和 AGP 版本 7.0.0。还尝试了一些早期版本(2.35、2.37)。

我也尝试过创建自己的工厂提供程序,但没有任何运气:

}

}

0 投票
1 回答
340 浏览

android - Hilt 模块中的 @AssistedInject 参数

我在将项目从 Dagger 迁移到 Hilt 时遇到问题。

遗留代码使用具有应用程序本身配置的类Foo (如国家代码等),在用户从触发异步调用的按钮中选择区域后检索此Foo类的实例。

Foo实例用于创建FooModule并分配给依赖关系图,如下所示:

此外,这个Foo类用于创建一个Factory类,该类根据所述 foo 类的属性返回不同类的实例(如 RetrofitApiClients)。

FooModule 类看起来像这样:

FooFactory类只是一个具有不同实现的接口,这些实现依赖于Foo属性来实例化类。

实现如下所示:

到目前为止我尝试了什么

我想到解决这个问题的是@AssistedInject,我将代码修改为如下所示:

食品模块:

FooModuleFactory(新类)

当接收到Foo实例时......

选择区域活动

但这不起作用,因为 Hilt 需要模块的空构造函数:

我尝试将@Assisted Foo构造函数添加为 FooModule 的辅助构造函数,并将主构造函数为空,但我得到了同样的错误。

在 Hilt 模块中可以有@Assisted属性吗?

0 投票
0 回答
118 浏览

android - 用匕首/刀柄辅助注射

假设我有一个名为 interfaceA 的接口

这是Assisted注入的具体实现

在这种情况下,您将如何使用AssistedInject,其中 dagger 还需要将具体类与接口绑定。

下面是正确的方法吗?或者我错过了什么?

然后,像这样绑定它

上述方法虽然有效,但我想知道是否有更好的方法或不同的方法,样板更少,我不知道。

0 投票
0 回答
129 浏览

android - 刀柄 - 辅助注射

我有工厂

在我的 viewModel 我有:

和 :

我得到错误:kotlin.UninitializedPropertyAccessException:lateinit 属性 setNumberUseCaseFactory 尚未初始化

为什么不注入 SetNumberUseCaseFactory?

0 投票
1 回答
136 浏览

android - 具有辅助注入和刀柄的共享视图模型

我有一个活动。此活动正在接收一些参数。目前,我可以viewModel使用这些参数通过辅助注入创建一个。

现在,我有一个navHostFragment导航图中的所有片段都将使用我之前在活动中创建的视图模型。但我找不到分享该 viewModel 的方法

我已经知道我们可以用来activityViewModels与活动共享 viewModel

但是我sharedViewModel没有没有辅助参数的构造函数(并且在运行时失败)。

目前,我有两个解决方案

第一个选项:在每个片段中“创建”一个新的 viewModel,并使用 activityViewModels 从活动(或 navArgs)接收参数以共享相同的实例(我不喜欢这种方法,但可以)

第二个选项:从构造函数中删除辅助参数并在 viewModel 中创建一个方法来设置我需要的信息:

所以,我的问题是......有没有办法在活动中创建一个带有辅助参数的视图模型,并与片段共享该视图模型?

0 投票
0 回答
11 浏览

android - 如何使用 Dagger Hilt 将 @Assisted 参数提供给依赖关系图

我的视图模型中有一个@Assisted 参数,所以:

参数是@Assisted val dataPaging: DataLugarPagging.

现在,我想使用该参数并注入我的依赖关系图中,以便在我的存储库中使用它:

但是,我现在不知道如何做到这一点。我创建了一个名为:

但我的 var 出现错误:

lateinit var dataLugarPaging: DataLugarPagging

由于这个原因,还没有被初始化为亲切的lateinit。

有没有人遇到过类似的事情?