dagger:定义在其构造函数中使用上下文的可注入类的正确方法

dagger:定义在其构造函数中使用上下文的可注入类的正确方法,第1张

概述我想使用匕首(Square匕首v1)创建一个单例类,其构造函数需要上下文作为参数.然后,我想将此单例类注入到MainActivity中.定义此步骤的正确步骤是什么?我尝试这样做:SingletonClass:@Module(injects={MainActivity.class})@SingletonpublicclassSingletonClass{...@I

我想使用匕首(Square匕首v1)创建一个单例类,其构造函数需要上下文作为参数.然后,我想将此单例类注入到MainActivity中.定义此步骤的正确步骤是什么?

我尝试这样做:

SingletonClass:

@Module(    injects = {MainActivity.class})@Singletonpublic class SingletonClass {...@InjectSingletonClass(Context ctx) {}}

我收到的错误:

no injectable members on androID.content.Context

我知道SingletonClass应该从某个地方接收它的上下文以便被注入,但是由于我不再以传统意义“调用”它,而是像在MainActivity中那样在类中注入它-水平:

@Inject SingletonClass singletonClass;

我应该如何传递上下文?

这是我为匕首创建的其他文件(在官方示例中看到了其中两个):

AndroIDModule:

@Module(library = true, injects = MainActivity.class)public class AndroIDModule {private final Context context;public AndroIDModule(Context context) {    this.context = context;}/** * Allow the application context to be injected but require that it be * annotated with to explicitly * differentiate it from an activity context. */@ProvIDes@Singleton@ForApplicationContext provIDeApplicationContext() {    return context;}}

App.class(扩展我的应用程序):

public class App extends Application {private static final String TAG = App.class.getSimplename();private static App instance;public MainActivity mainActivity;private static Context context;private ObjectGraph objectGraph;public voID onCreate() {    super.onCreate();    instance = this;    context = getApplicationContext();    objectGraph = ObjectGraph.create(getModules().toArray());}public static App getInstance() {    return instance;}public static Context getContext() { return context; }protected List<Object> getModules() {    return Arrays.asList(new AndroIDModule(this), new App());}public voID inject(Object object) {    objectGraph.inject(object);}}

ForApplication类:

import java.lang.annotation.Retention;    import javax.inject.QualifIEr;    import static java.lang.annotation.RetentionPolicy.RUNTIME;@QualifIEr @Retention(RUNTIME)public @interface ForApplication {}

解决方法:

您需要将@ForApplication限定词添加到SingletonClass构造函数中的Context参数中.

Dagger现在正在寻找要注入的上下文,但是只有@ForApplication Context,这是不匹配的.

@Singletonpublic class SingletonClass {    @Inject    SingletonClass(@ForApplication Context ctx) {    }}

现在,您还可以摆脱AndroIDModule中的library = true行,您可能已经添加了它,因为Dagger警告您@ForApplication Context未使用(不要忽略这些警告!).

另外,这可能只是复制粘贴错误,此SingletonClass不应具有@Module批注.

总结

以上是内存溢出为你收集整理的dagger:定义在其构造函数中使用上下文的可注入类的正确方法全部内容,希望文章能够帮你解决dagger:定义在其构造函数中使用上下文的可注入类的正确方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1079358.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存