如何在依赖注入中提供和注入DividerItemDecoration,并且应该注入所有内容?

时间:2019-03-18 13:57:29

标签: android dependency-injection dagger-2

我相信我应该注入一切。 (所以我们也可以讨论) 我使用了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???).. ? 

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

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

等待您的支持。

它也是一个本机视图的东西,也许它不需要注入..请告诉您的意见..我提醒您,我仍然需要一个示例并学习注入和提供的那种方法。.

非常感谢

2 个答案:

答案 0 :(得分:0)

我想分享一个有关依赖注入的文字,它使我们可以使用依赖注入改变主意:

请勿(始终)使用DI:注射剂与新药

  

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

     

我认为这是关于该主题的好帖子。介绍概念   “新产品”和“可注射产品”。

     

可注入对象是DI图根附近的类。执行个体   这些类中的一种是您期望DI的对象   提供和注入的框架。管理器或服务类型的对象是   注射剂的典型例子。新事物是边缘的对象   DI图的一部分,或者甚至不真正属于DI图的一部分   所有。整数,地址等是可更新商品的示例。从广义上讲,   新产品是被动对象,没有必要注入或注入   嘲笑他们。它们通常包含您中的“数据”   应用程序,并且仅在运行时可用(例如您的地址)。   新产品不应保留对注射剂的引用,反之亦然   (该帖子的作者将其称为   “可注射/可分离”。

     

实际上,我发现,并非总是容易或可能的   明确区分注射剂和新药。不过我   认为它们是很好的概念,可用于您的思考   处理。在添加另一个工厂之前一定要三思   您的项目!

我们决定删除ArrayList,LinearLayoutManager,DividerItemDecoration的注入。我们创建的类没有“新”注入

答案 1 :(得分:0)

我们可以使用@Named注入相同的类

@Provides
        @Named(CMS.Client.DELIVERY_API_CLIENT)
        fun provideCMSClient(): CDAClient {
            return CDAClient.builder()
                    .setSpace("4454")
                    .setToken("777")
                    .build()
        }



    @Provides
    @Named(CMS.Client.SYNC_API_CLIENT)
    fun provideCMSSyncClient(): CDAClient {
        return CDAClient.builder()
                .setSpace("1234")
                .setToken("456"))
                .build()
    }