gpt4 book ai didi

android - 如何使用 Dagger 2 将多个组件注入(inject)到同一个对象中

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:57 24 4
gpt4 key购买 nike

所以我有一个 ApplicationComponent 用于将单例注入(inject)到我的 fragment 和演示者中,但我正在尝试创建一个组件来注入(inject)到与 AppComponent 相同的演示者中。类似的东西。

@Component{modules = FileManagerModule.class}
public interface FileManagerComponet
{
public void inject(MyPresenter presenter);
}

@Component{modules = AppModule.class}
public interface AppComponent
{
public void inject(MyPresenter presenter);
}

@Module
public class AppModule
{
private Context appContext;
@Provides
@Singleton
public SharedPreferences preferences()
{
return appContext.sharedPreferences();
}
...
}

@Module
public class FileManagerModule
{
private Context activityContext;
@Provides
public FileManager FileManager()
{
return new FileManager(activityContext);
}
...
}

最佳答案

对于任何无法弄清楚这一点的人来说,一个组件必须提供一个对象的所有依赖项。所以在我的例子中,我必须使 FileManagerComponent 成为一个子组件,并使用我的 AppComponent 对其进行“.plus()”,或者使其依赖于 AppComponent 并让 AppComponent 通过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);
}

现在您必须构建依赖于应用程序组件的组件。

FileManagerComponent fmc = DaggerFileManagerComponent.builder()
.applicationComponent(appComponent)
.fileManagerModule(new FileManagerModule())
.build();
fmc.inject(this);

关于android - 如何使用 Dagger 2 将多个组件注入(inject)到同一个对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38979546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com