gpt4 book ai didi

android - Dagger 2 组件继承和错误

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:45 25 4
gpt4 key购买 nike

我正在尝试创建以下场景:

public interface DaggerInjectionFactory {
void inject(MyActivity myActivity);
}

@Singleton
@Component(modules = {RestModule.class})
public interface MyRestComponent extends DaggerInjectionFactory {
RestClient provideRestClient();
}

@Singleton
@Component(modules = {PreferencesModule.class})
public interface MyPreferencesComponent extends DaggerInjectionFactory {
SharedPreferences provideSharedPreferences();
}

dagger 编译器给出以下错误作为响应:

error: RestClient cannot be provided without an @Provides- or @Produces-annotated method.

RestModule 包含一个 @Provides @Singleton RestClient provideRestClient() 方法,同样值得注意的是,当我删除 extends DaggerInjectionFactoryMyPreferencesComponent 中,dagger 编译器在生成组件构建器时没有问题。

我想做的是创建一个包含所有可注入(inject)类的接口(interface),我想在其中使用 @Inject 注释,并在我的“所有”组件中实现它们,这样我不必将 void inject(MyActivity myActivity); 添加到我的所有组件。

因为我是这个框架的新手,所以我不知道正确的术语是什么,因此对于我需要搜索的内容没有真正的线索。

所以我的问题是:是否可以创建这样的结构,定义一个接口(interface),自动将所有 void inject() 方法添加到我的“所有”组件?如果可以,如何实现?

-- 编辑--预期的用法类似于:

public MyActivity extends Activity {
private RestClient restClient;
private SharedPreferences sharedPreferences;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

MyRestComponent.Instance.build().inject(this);
MyPreferencesComponent.Instance.build().inject(this);
}

@Inject
public void setRestClient(RestClient restClient){
this.restClient = restClient;
}

@Inject
public void setSharedPreferences(SharedPreferences sharedPreferences){
this.sharedPreferences = sharedPreferences;
}
}

最佳答案

您不需要为每个模块创建组件。您可以向组件添加更多模块,并在这个接口(interface)上提供所有类。

@Singleton
@Component(
modules = {RestModule.class, PreferencesModule.class}
)
public interface AppComponent {

void inject(MainApplication app)
void inject(MainActivity activity);
}

如果您要求向所有 Activity/fragment/MainApplication 注入(inject)组件,则没有此方法。您必须指定以上哪些将获得依赖注入(inject)。

关于android - Dagger 2 组件继承和错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31005467/

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