带有限定符的 Dagger 依赖注入提供程序
Dagger Dependency Injection Provider with Qualifier
我想确认一下:如果两个提供商提供相同类型的实例,一个有限定符而另一个没有,这行得通吗?
// Existing provider
@Singleton
@Provides
static MetricsCollectorFactory provideMetricsCollectorFactory(){}
// New one to be added
@Singleton
@Provides
@VersionBasedMetricsCollectorFactory
static MetricsCollectorFactory provideVersionBasedMetricsCollectorFactory(){}
下面两种情况,尤其是TestClass1,Dagger会知道注入哪个MetricsCollectorFactory吗?
@Inject
TestClass1(MetricsCollectorFactory basicFactory)
@Inject
TestClass2(@VersionBasedMetricsCollectorFactory MetricsCollectorFactory basicFactory)
是的,与 Dagger dev guide 一样,每个键或绑定有零个或一个限定符实例,不存在与存在不同。
但是,从可读性的角度来看,您可能会考虑避免让两者共存——尤其是当您的团队不熟悉 Dagger 时。您的 @VersionBasedMetricsCollectorFactory MetricsCollectorFactory
可能最终会成为一个字段 metricsCollectorFactory
,这可能会导致不熟悉的开发人员注入空 MetricsCollectorFactory
而不是所需的 @VersionBasedMetricsCollectorFactory MetricsCollectorFactory
。相反,引入像 @Default MetricsCollectorFactory
这样的替代方案可能会有所帮助,或者至少会提供一个有用的编译错误,以鼓励更仔细地阅读注入密钥。
我想确认一下:如果两个提供商提供相同类型的实例,一个有限定符而另一个没有,这行得通吗?
// Existing provider
@Singleton
@Provides
static MetricsCollectorFactory provideMetricsCollectorFactory(){}
// New one to be added
@Singleton
@Provides
@VersionBasedMetricsCollectorFactory
static MetricsCollectorFactory provideVersionBasedMetricsCollectorFactory(){}
下面两种情况,尤其是TestClass1,Dagger会知道注入哪个MetricsCollectorFactory吗?
@Inject
TestClass1(MetricsCollectorFactory basicFactory)
@Inject
TestClass2(@VersionBasedMetricsCollectorFactory MetricsCollectorFactory basicFactory)
是的,与 Dagger dev guide 一样,每个键或绑定有零个或一个限定符实例,不存在与存在不同。
但是,从可读性的角度来看,您可能会考虑避免让两者共存——尤其是当您的团队不熟悉 Dagger 时。您的 @VersionBasedMetricsCollectorFactory MetricsCollectorFactory
可能最终会成为一个字段 metricsCollectorFactory
,这可能会导致不熟悉的开发人员注入空 MetricsCollectorFactory
而不是所需的 @VersionBasedMetricsCollectorFactory MetricsCollectorFactory
。相反,引入像 @Default MetricsCollectorFactory
这样的替代方案可能会有所帮助,或者至少会提供一个有用的编译错误,以鼓励更仔细地阅读注入密钥。