Я столкнулся со специфической проблемой с Dagger. У меня есть компонент ApplicationComponent
для производственного кода, а для инструментальных испытаний он расширен на TestApplicationComponent
. Теперь у меня есть привязка на основе карты, настроенная для внедрения модели представления, которая работает нормально, за исключением тестов инструментовки. Для них сгенерированный DaggerTestApplicationComponent
заканчивается использованием ImmutableMap
в Guava для мультисвязывания, в то время как DaggerApplicationComponent
использует для него Collections.unmodifiableMap
.
Этот код генерируется в DaggerTestApplicationComponent
:
private Map<Class<? extends ViewModel>, Provider<ViewModel>> getMapOfClassOfAndProviderOfViewModel() {
return ImmutableMap.<Class<? extends ViewModel>, Provider<ViewModel>>of(Foo.class, DaggerTestApplicationComponent.this.bindFooProvider, Barclass, bindBarProvider);
}
И это равный код в DaggerApplicationComponent
(MapBuilder.build()
возвращает java.util.Map
через Collections.unmodifiableMap
):
private Map<Class<? extends ViewModel>, Provider<ViewModel>> getMapOfClassOfAndProviderOfViewModel() {
return MapBuilder.<Class<? extends ViewModel>, Provider<ViewModel>>newMapBuilder(2).put(Foo.class, DaggerApplicationComponent.this.bindFooProvider).put(Bar.class, bindBarProvider).build();
}
Что именно контролирует эту разницу? Есть ли способ заставить тестовый компонент использовать тот же MapBuilder
logi c, который используется в производственном компоненте?