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