android – 匕首和嵌套注射

android – 匕首和嵌套注射,第1张

概述我正在使用 Dagger将依赖项注入到 Android应用程序,我偶然发现了一个我不完全确定的问题 如何以干净的方式解决. 我想要实现的是实现帮助并将其注入我的内部 活动,并让这些助手也包含注入的成员. 什么有效 我的助手注入的活动: public class MyActivity extends Activity { @Inject SampleHelper helper; @ 我正在使用 Dagger将依赖项注入到
AndroID应用程序,我偶然发现了一个我不完全确定的问题
如何以干净的方式解决.

我想要实现的是实现帮助并将其注入我的内部
活动,并让这些助手也包含注入的成员.

什么有效

我的助手注入的活动:

public class MyActivity extends Activity {    @Inject SampleHelper helper;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        ((MyApplication) getApplication()).inject(this);        Log.i("deBUG","helper = " + helper);        Log.i("deBUG","helper context = " + helper.context);    }}

创建对象图的应用程序:

public class MyApplication extends Application {    private ObjectGraph graph;    @OverrIDe    public voID onCreate() {        super.onCreate();        graph = ObjectGraph.create(getModules());    }    private Object[] getModules() {        return new Object[] { new MyModule(this) };    }    public voID inject(Object target) {        graph.inject(target);    }}

当我直接实例化SampleHelper类时,注入工作完美,
它反过来接收注入的应用程序上下文:

@Singletonpublic class SampleHelper {    @Inject public Context context;    @Inject    public SampleHelper() {}}

使用以下模块:

@Module(    injects = { MyActivity.class },complete = false,library = true)public class MyModule {    private final MyApplication application;    public MyModule(MyApplication application) {      this.application = application;    }    @ProvIDes @Singleton Context provIDeApplicationContext() {        return application;    }}

什么行不通

但是,当我将辅助接口与其实现分开时:

public interface SampleHelper {}@Singletonpublic class SampleHelperImpl implements SampleHelper {    @Inject public Context context;    @Inject    public SampleHelperImpl() {}}

并将其添加到匕首模块:

public class MyModule {    ...    // added this method    @ProvIDes @Singleton public SampleHelper provIDeSampleHelper() {        return new SampleHelperImpl();    }    ...}

正如我所料,上下文不会被注入我的SampleHelperImpl中.现在,我想这是由于SampleHelperImpl是通过直接构造函数调用而实现的
那个注入启动的构造函数调用,因为MyModule#provIDeApplicationContext()甚至没有被调用,所以我的猜测是我错过了一些关于Dagger的东西(很可能,因为我以前的DI体验只包括Spring).

关于如何在我的注入帮助器实现中以“干净的Dagger”方式注入我的上下文的任何想法?

非常感谢!

解决方法 这是一个相当古老的问题,但我认为你想要的是:
@ProvIDes @Singleton public SampleHelper provIDeSampleHelper(SampleHelperImpl impl) {    return impl;}

这样Dagger将创建SampleHelperImpl并因此注入它.

总结

以上是内存溢出为你收集整理的android – 匕首和嵌套注射全部内容,希望文章能够帮你解决android – 匕首和嵌套注射所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1131487.html

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

发表评论

登录后才能评论

评论列表(0条)

保存