我有一个带有依赖注入的 Api 类,其中有一个使用此注入的函数:
class Api @Inject()(userRepo: UserRepo) extends Controller {
def user(email: String) ={
userRepo.getUser(email).map( .... )
}
}
同一个软件包中的对象 FlashSession - 我在很多其他文件中使用它。 我想在我的obj FlashSession 中使用用户功能。
object FlashSession {
def test = ... Api.user("test@gmail.com") ....
}
但是我无法导入 Api 类,因为它是一个类而不是一个对象,我不能把这个函数放到compagnon对象中,因为它需要DI。
处理它的最佳方法是什么?
感谢您的帮助!
答案 0 :(得分:1)
您可以在Api
FlashSession
课程
object FlashSession {
def test = new Api(new UserRepo()).user(...)
}
或
object FlashSession {
def test(userRepo: UserRepo) = new Api(userRepo).user(...)
}
但这可能不是你真正想要的。不应将全局伴随对象与DI一起使用,尤其是对于数据库数据操作。
答案 1 :(得分:1)
您不能使用Api.user(“email”),因为Api是一个类而不是一个对象。在java中,它喜欢从静态方法调用非静态方法。从理论上讲,你可以有超过1个Api实例,甚至没有Api实例。因此,在对象FlashSession中使用类Api是没有意义的。
如果将Flash更改为类并注入Api类,它将更好用:
class FlashSession @Inject()(api: Api) {
def test = ... api.user("test@gmail.com") ....
}
然后,您需要将FlashSession注入到使用它的所有类中。
您可能会发现新开发人员会将所有内容都设为对象,因为它最简单,而不是任何DI(依赖注入)。为了允许使用诸如模拟之类的东西进行更有效的测试,它们将演变为使用DI。但是,将类与DI混合和匹配,以及对象效果不佳。