【发布时间】:2021-11-11 22:32:29
【问题描述】:
使用 Dagger2 可以很容易地显式创建组件并列出它们的依赖项。但是我似乎无法找到一种方法来提供接口的不同实现来让我们说一个片段。
例如,我的应用有 2 种生产模式:付费和免费。 我有一个 PaidActivity 和一个 FreeActivity,它们都使用 Analytics 类开始完全相同的仪表板片段。对于付费,我提供了一个 PaidAnalytics 实现,对于免费,我提供了一个 FreeAnalytics 实现。
使用 Dagger2,只需在 Activity 的组件(或子组件)中列出付费或免费模块即可轻松实现。
@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
...
}
我找不到匕首柄的方法。
【问题讨论】:
-
不,它需要不同的限定符,您必须在编译时指定。我需要在运行时切换依赖项。
-
其实我已经知道答案了,只是没有在这里给出正确的答案。匕首刀柄不可能在运行时为我的特定用例提供不同的接口实现。
标签: android dependency-injection dagger-2 dagger-hilt