对于任何无法解决这个问题的人来说,一个组件必须为对象提供所有依赖关系.所以在我的情况下,我必须使FileManagerComponent成为一个子组件,并将“.plus()”与我的AppComponent一起使用,或者让它依赖于AppComponent,让AppComponent通过Context context()来暴露Context下游;允许依赖于它的组件可以访问其拥有的上下文的方法.
例如:
@Singleton
@Component(modules = {NetworkModule.class,AndroidModule.class})
public interface ApplicationComponent {
FileManagerComponent plus(FileManagerModule module);
}
@Subcomponent(modules = {FileManagerModule.class})
public interface FileManagerComponent {
void injectMyActivity(MyFileManagingActivity activity);
}
你会像这样使用它(在MyFileManagingActivity中):
FileManagerComponent fmc = applicationComponent.plus(new FileManagerModule());
fmc.injectMyActivity(this);
或者,如果您不想使用这样的子组件:
@Singleton
@Component(modules = {NetworkModule.class,AndroidModule.class})
public interface ApplicationComponent {
Context context();
File applicationRootDirectory();
}
// Notice this is ALSO a Component
@Component(modules = {FileManagerModule.class},dependencies = ApplicationComponent.class)
public interface FileManagerComponent {
void inject(MyFileManagerActivity activity);
}
现在,您必须构建依赖于app组件的组件.
FileManagerComponent fmc = DaggerFileManagerComponent.builder()
.applicationComponent(appComponent)
.fileManagerModule(new FileManagerModule())
.build();
fmc.inject(this);