我开始学习Dagger 2,有一件事让我很难受:注射机制。我之前使用的是RoboGuice
,我的项目看起来像MVP机制
所以控制器是@Singleton
,在每个视图中我总是只调用@Inject
DedicatedController。它很棒。
但是在Dagger 2中实现同样的目标我需要在Modules
中定义每个控制器(根据模式甚至可能在许多文件中),并在Component
中定义每个View注射目标。
这在我看来很糟糕,并且破坏了使用Dagger 2简化编码的想法。您是否有任何关于如何简化此机制并避免开销的解决方案?
答案 0 :(得分:1)
如果您要使用第三方库,您将享受其优势并接受其限制。如果您认为限制超过附加值,请不要使用它。每个图书馆都是如此。
关于Dagger2,匕首与组件和模块一起工作 - 这就是它的构建方式。话虽如此 - 有一个非常酷的功能,让你有时可以解决这个问题 - 这就是注入的构造函数。
当构造函数标有@Inject
注释时,它会做两件事:
这意味着带有注入构造函数的类不需要由模块创建,也不需要了解组件。
无法对活动和碎片进行此操作,因为您无法控制它们何时被实例化。
<强> TL; DR 强>
如果您的模型和演示者都有一个注入的构造函数,那么只有您的视图(活动和片段)需要知道Component
。