工厂的Dagger 2子组件设置了依赖性

时间:2019-02-16 09:20:30

标签: android factory dagger-2 dagger subcomponent

我创建了一个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
    }

是否有任何干净而又不错的方法来避免在此处声明依赖项?

0 个答案:

没有答案