Android 如何从不同的Dagger2组件注入同一类?
假设我有多个活动,每个活动都包含单独的Dagger2组件。因此Android 如何从不同的Dagger2组件注入同一类?,android,dagger-2,Android,Dagger 2,假设我有多个活动,每个活动都包含单独的Dagger2组件。因此FooActivity具有FooComponent和BarActivity具有BarComponent。我还有一些视图组,比如说BazViewGroup,可以在这两个活动中使用,并且必须通过匕首图接收一些依赖项。既然我们事先不知道它属于什么活动,那个么向该视图组的实例中注入依赖项的最佳方法是什么 现在我有以下设置: 每个活动都公开方法getComponent(),该方法返回此活动中包含的组件 每个组件都像这样扩展接口 public i
FooActivity
具有FooComponent
和BarActivity
具有BarComponent
。我还有一些视图组,比如说BazViewGroup
,可以在这两个活动中使用,并且必须通过匕首图接收一些依赖项。既然我们事先不知道它属于什么活动,那个么向该视图组的实例中注入依赖项的最佳方法是什么
现在我有以下设置:
getComponent()
,该方法返回此活动中包含的组件public interface CanInjectIntoBazViewGroup {
void inject(BazViewGroup viewgroup);
}
CanInjectionToBazViewGroup
并调用inject
方法有更好的方法吗?匕首2的最佳实践是不要滥用它(像其他任何东西一样) 因此,如果您已经有了
活动的组件
,并且在这两个活动
中都有对BazViewGroup
的引用,那么我看不出有任何理由使用Dagger 2对该BazViewGroup
执行DI
有两种情况
视图组是用XML声明的:
如果您在XML中声明BazViewGroup
,并让Android为您充气,那么您可以在该对象上执行“方法DI”-定义方法,如setXYZ()
,并在视图层次结构充气后从活动中传递XYZ
以编程方式创建视图组:
如果以编程方式实例化视图组
,则可以将其依赖项添加为构造函数参数
这两种方法都不是很干净,因为它们在活动
和视图组
的内部之间创建了一些耦合,但这比将视图组
耦合到Dagger框架要好得多
更简洁的方法是从ViewGroup
中删除这些依赖项。我想你需要它们来执行一些用户交互操作,或者查询数据,对吗?为什么不创建回调接口并将所有这些操作委托给封闭的活动
?这样,如果有一天重构业务逻辑,您的自定义视图将不会受到影响