我正在创建一个 Android 应用程序并希望遵守干净的架构。例如,我有一个活动,它有一个创建用例的演示者。在那个内层,我有一个存储库接口(由用例知道),它由一个具体的存储库实现,我们称之为 repsoitoryImpl(用例不知道)。我在之前的项目中所做的就是在activity中创建presenter和repositoryImpl,并将repositoryImpl作为repository传递给presenter。然后,只要有来自活动的动作(例如按下按钮),演示者就可以创建一个新的用例并将存储库传递给它。
这可行,但是 a) 用例的构造函数可能会变得很长 b) UI 了解所有其他“外部”事物,例如 repositoryImpl。所以我想DI来救援!并开始尝试 Dagger 2。但是,我目前的解决方案似乎并不“正确”。我想要的是我可以在一个用例中拥有一个带有@inject 注释的存储库,并且一个repositoryImpl 被注入。但是我发现,在“注入链”的开头,我必须在匕首组件上调用 inject() 。在大多数示例中,这是在活动中完成的。但是随后我必须将演示者注入活动中,并将用例注入演示者,以便能够将内容注入用例。这个对吗?问题是我想用不同的参数动态创建用例而不是注入它们。
所以我目前的解决方案是将匕首“AppComponent”作为Android应用程序类中的静态字段,然后在我的用例中调用
Application.component.inject(this)
这允许我在用例中注入东西。但是随后用例依赖于不符合干净架构的匕首。因为框架依赖应该只出现在外层。
这个问题有一个通用的解决方案吗?我理解错了吗?