Dmy*_*iev 11 android dependency-injection dagger-2 dagger-hilt
使用 Dagger2 可以轻松显式创建组件并列出它们的依赖项。但我似乎找不到一种方法来提供接口的不同实现,比如片段。
例如,我的应用程序有 2 种生产模式:付费和免费。我有一个 PaidActivity 和一个 FreeActivity,它们都使用 Analytics 类启动完全相同的仪表板片段。对于付费,我提供 PaidAnalytics 实现,对于免费,我提供 FreeAnalytics 实现。
使用 Dagger2,只需在活动的组件(或子组件)中列出付费或免费模块即可轻松实现。
@Module
abstract class FreeActivityModule {
@ContributesAndroidInjector(
modules = [
FreeAnalyticsModule::class,
DashboardFragmentModule::class
]
)
abstract fun injectFreeActivity(): FreeActivity
}
@Module
abstract class PaidActivityModule {
@ContributesAndroidInjector(
modules = [
PaidAnalyticsModule::class,
DashboardFragmentModule::class
]
)
abstract fun injectPaidActivity(): PaidActivity
}
@Module
abstract class DashboardFragmentModule {
@ContributesAndroidInjector
abstract fun injectDashboardFragment(): DashboardFragment
}
class DashboardFragment : Fragment() {
...
@Inject
lateinit var analytics: Analytics
...
}
Run Code Online (Sandbox Code Playgroud)
对于 Dagger Hilt,我找不到办法做到这一点。
在我的用例中,使用 Dagger 不可能在运行时替换依赖项。
在一次 Google Hilt 会议期间,他们建议在 Provides 方法中使用 if else 语句:https://youtu.be/i27aNF-kYR4? t=3355(这是我更愿意避免的)。
上面的答案不理解我的问题,因为它们在编译时限定依赖项,这是我无法做到的。因为我的片段永远不知道它的使用位置,所以我不想只是重复代码。
这是一个示例,您可以在其中准确地看到我正在做的事情,并且它无法通过设计来实现 Hilt: https: //github.com/dmytroKarataiev/daggerAndroidvsHiltRuntimeDependencies
| 归档时间: |
|
| 查看次数: |
5279 次 |
| 最近记录: |