我将在我的项目中使用Anvil。
https://github.com/square/anvil
但我无法弄清楚它所需的使用模式是什么?我应该有一个全局AppScope:core
并将每个模块的所有绑定合并:feature
到其中吗?因此,每个:feature
模块都将其绑定添加到AppScope中,因此每个模块都:feature
知道有关任何其他模块的一切:feature
。这听起来很混乱,对吗?
我没有看到任何有依赖范围的可能性。例如,MyFeatureScope依赖于AppScope。因此,只有特定:feature
模块实际上将其绑定贡献到MyFeatureScope中,但它们仍然可以使用AppScope中的通用绑定。
Anvil是否支持其范围之间的此类依赖关系?
我应该有一个全局AppScope吗?或者我应该有一组独立的作用域 - 每个:feature
模块一个 - 可以以某种方式依赖于带有“公共绑定”的AppScope?
Square Inc. 在 Droidcon SF'19 上展示了其内部模块化架构:
https://www.droidcon.com/media-detail?video=380843878
但是,我对一些子弹有点困惑。请你帮助我好吗?
:wiring
模块?我发现它增加了复杂性:你会为每个新功能获得额外的 gradle 模块
你必须作出一种全球性注入到您的片段在某处:app
,因为碎片在定义:impl
模块不能访问它的DaggerComponent,这是在定义:impl-wiring
模块。:impl
不依赖于:impl-wiring
,因为依赖是相反的。
你不能有一个 Android 动态功能模块,因为他们应该知道它是DaggerComponent以便注入它的Fragment。但是没有办法从:app
模块进行这种注入,这是动态功能的基本模块。
那么为什么是:wiring
模块呢?
可以将:impl
and:impl-wiring
或:fake
and合并:fake-wiring
在一起以消除上述所有问题。而且,在:demo-apps
一个可能只是对依赖要么:impl
或:fake``, and not on
:IMPL接线(or
:假wiring```)。
我正在使用隐式意图来打开画廊以选择图像。我通常会执行以下操作:
Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
.takeIf { it.resolveActivity(activity.packageManager) != null }
?.let {
val intent = Intent.createChooser(it, "Choose gallery")
activity.startActivityForResult(intent, rc)
}
Run Code Online (Sandbox Code Playgroud)
但是,如果该意图仅通过我设备上的单个应用程序解决,并且没有其他图库应用程序,只有一个应用程序,则选择器将仅显示无用的单个选择。
我如何确定是否有许多活动可以解决该意图?如何获得实际适合的活动数量?因此,决定是否显示选择器。
我正在使用适用于 Android 的 GraphQL shopify buy-sdk,并通过字符串 id 获取产品的节点,例如:
"id" -> "Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzEwMDcyMDgwOTc1"
Run Code Online (Sandbox Code Playgroud)
这是节点 ID
但要获取产品元字段,我必须向 Admin API 发出请求
https://SHOP.myshopify.com/admin/products/{productId}/metafields.json
Run Code Online (Sandbox Code Playgroud)
其中 {productId} 是产品的数字 ID,例如:
6243834538
Run Code Online (Sandbox Code Playgroud)
我无法在 REST API 请求中使用节点 ID,收到 400“错误请求”。
所以问题是- 如何在 GraphQL 中获取节点的数字产品 id?
谢谢!