首页 > 解决方案 > 如何在依赖注入中提供和注入 DividerItemDecoration,我应该注入所有内容吗?

问题描述

我相信我应该注入一切。(所以我们也可以讨论它)我使用了一个 recycleview 并添加了一个 dividerItemDecoration 或 LinearLayoutManager

所以在我的 ActivityModule.java

public class ActivityModule {

    private AppCompatActivity mActivity;

    public ActivityModule(AppCompatActivity activity) {
        this.mActivity = activity;
    }

 @Provides
    DividerItemDecoration provideDividerItemDecoration() {
        return new DividerItemDecoration(mActivity, DividerItemDecoration.VERTICAL);
    }}

我像这样提供我的 DividerItemDecoration。

我的片段上我只是注入

  @Inject
    DividerItemDecoration itemDecorator;

并像这样使用它:

itemDecorator.setDrawable(Objects.requireNonNull(getDrawable(getBaseActivity(), R.drawable.language_separator)));

片段没问题。

问题 :

下次我可以在另一个片段中使用 DividerItemDecoration 作为 Horizo​​ntal.. 并且我不能再次提供 DividerItemDecoration。

我想创建通用方法或其他东西。例如,我将注入我的片段

@Inject 
DividerItemDecoration itemDecorator(horizontal???).. ? 

我不知道它的语法和逻辑如何。

如何提供和注入这种代码?

等待您的支持。

也是原生视图的东西,可能不需要注入..请说出你的意见..我提醒你,我仍然需要一个例子,学习那种方法注入和提供..

非常感谢

标签: androiddependency-injectiondagger-2

解决方案


我想分享一篇关于依赖注入的文章,它让我们改变了使用依赖注入的想法:

不要(总是)使用 DI:注射剂与新药

在学习 DI 框架时,对我非常有用的一点是意识到使用 DI 框架并不意味着您必须通过 DI 来初始化所有对象。作为经验法则:注入您在编译时知道并且与其他对象具有静态关系的对象;不要注入运行时信息。

我认为这是一个关于这个主题的好帖子。它引入了“newables”和“injectables”的概念。

Injectables 是靠近 DI 图根的类。这些类的实例是您希望 DI 框架提供和注入的对象类型。管理器或服务类型的对象是可注入的典型示例。Newables 是您的 DI 图边缘的对象,或者根本不是您的 DI 图的一部分。整数、地址等是新变量的例子。从广义上讲,newables 是被动对象,注入或模拟它们是没有意义的。它们通常包含应用程序中的“数据”,并且仅在运行时可用(例如您的地址)。新产品不应保留对可注射产品的引用,反之亦然(该帖子的作者将其称为“可注射/新产品分离”)。

实际上,我发现要明确区分注射剂和新剂并不总是容易或不可能的。尽管如此,我认为它们是很好的概念,可以用作您思考过程的一部分。在将另一个工厂添加到您的项目之前一定要三思而后行!

我们决定移除 ArrayList、LinearLayoutManager、DividerItemDecoration 的注入。我们用“new”而不是注入创建了这些类


推荐阅读