android - 如何在依赖注入中提供和注入 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 作为 Horizontal.. 并且我不能再次提供 DividerItemDecoration。
我想创建通用方法或其他东西。例如,我将注入我的片段
@Inject
DividerItemDecoration itemDecorator(horizontal???).. ?
我不知道它的语法和逻辑如何。
如何提供和注入这种代码?
等待您的支持。
也是原生视图的东西,可能不需要注入..请说出你的意见..我提醒你,我仍然需要一个例子,学习那种方法注入和提供..
非常感谢
解决方案
我想分享一篇关于依赖注入的文章,它让我们改变了使用依赖注入的想法:
不要(总是)使用 DI:注射剂与新药
在学习 DI 框架时,对我非常有用的一点是意识到使用 DI 框架并不意味着您必须通过 DI 来初始化所有对象。作为经验法则:注入您在编译时知道并且与其他对象具有静态关系的对象;不要注入运行时信息。
我认为这是一个关于这个主题的好帖子。它引入了“newables”和“injectables”的概念。
Injectables 是靠近 DI 图根的类。这些类的实例是您希望 DI 框架提供和注入的对象类型。管理器或服务类型的对象是可注入的典型示例。Newables 是您的 DI 图边缘的对象,或者根本不是您的 DI 图的一部分。整数、地址等是新变量的例子。从广义上讲,newables 是被动对象,注入或模拟它们是没有意义的。它们通常包含应用程序中的“数据”,并且仅在运行时可用(例如您的地址)。新产品不应保留对可注射产品的引用,反之亦然(该帖子的作者将其称为“可注射/新产品分离”)。
实际上,我发现要明确区分注射剂和新剂并不总是容易或不可能的。尽管如此,我认为它们是很好的概念,可以用作您思考过程的一部分。在将另一个工厂添加到您的项目之前一定要三思而后行!
我们决定移除 ArrayList、LinearLayoutManager、DividerItemDecoration 的注入。我们用“new”而不是注入创建了这些类