我创建了一个Dagger 2组件,该组件知道如何实例化一组工厂实现。看起来像这样:
@Component(modules = {DeviceModule.class})
public interface DeviceComponent {
Set<DeviceFactory> deviceFactories();
}
@Module
public interface DeviceModule {
@IntoSet
@Binds
DeviceFactory provideSmartFactory(SmartFactory impl);
@IntoSet
@Binds
DeviceFactory provideStupidFactory(StupidFactory impl);
}
现在,我想使用我的工厂来创建适当的对象,并且正在mapper类中这样做:
private DeviceComponent deviceFactoryComponent =
DaggerDeviceComponent.create();
public DeviceModel map(Device pojo) {
for (DeviceFactory deviceFactory : deviceFactoryComponent.deviceFactories()) {
final DeviceModel result = deviceFactory.map(pojo);
if (null != result) {
return result;
}
}
return null;
}
此代码有效,deviceFactoryComponent.deviceFactories()返回预期的2个工厂实现。 问题在于,在某些工厂实现中,我需要从MainModule / MainComponent匕首图提供的某些依赖关系,例如上下文。在这里要注意,我想创建约20个工厂,这些工厂与主图具有不同的依赖关系,并且我想避免提供将DeviceComponent成为子组件的实际DeviceModule实现。另外,如果我提供MainComponent作为依赖项,则必须在MainComponent中声明所有需要的依赖项,例如:
@Singleton
@Component(modules = {
MainModule.class,
})
public interface MainComponent extends AndroidInjector<MyApplication> {
Context getContext();
MyManager getManager();
//..etc
}
是否有任何干净而又不错的方法来避免在此处声明依赖项?