首页 文章

使用依赖注入播放2.5 scala导入类

提问于
浏览
1

我有一个带有依赖注入的类 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 回答

  • 1

    你可以在 FlashSession 里面创建这个 Api

    object FlashSession {
       def test = new Api(new UserRepo()).user(...)
    }
    

    要么

    object FlashSession {
       def test(userRepo: UserRepo) = new Api(userRepo).user(...)
    }
    

    但这可能不是你真正想要的 . 不应将全局伴随对象与DI一起使用,尤其是对于数据库数据操作 .

  • 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和对象混合和匹配类不能很好地工作 .

相关问题