在游戏中使用 ActionBuilder 创建自定义 Action 时使用 guice

2024-02-14

使用 ActionBuilder 创建自定义 Action 时如何使用 guice?

如果我将 ActionBuilder 从对象更改为类,它似乎会抱怨“未找到:值 MyAction”。

我有这个,但它不起作用:

case class MyModel(name: String, request: Request[A]) extends WrappedRequest[A](request)

class MyAction @Inject()(userService: UserService) extends ActionBuilder[MyModel] {
  def invokeBlock[A](request: Request[A], block: (MyModel[A]) => Future[SimpleResult]) = {
    val abc = loadAbc(request)
    block(new MyModel(abc, request))
  }

  def loadAbc(rh: RequestHeader): String {
    "abc" // just for testing
  }
}

所以将其从object to a class导致它失败,我尝试将其保留为对象,但随后它无法正确编译。

我怎样才能让它发挥作用?

我让它在我的控制器中工作得很好。


经过一些小的修正,你所得到的似乎已经可以工作了。您所要做的就是注入 guice 实例化的实例MyAction到你的控制器中,然后你可以使用该实例(而不是尝试使用MyAction班级名称)。

这适用于 Play 2.3:

import scala.concurrent.Future
import javax.inject.{Inject, Singleton}
import play.api.mvc._

class UserService() {
  def loadAbc(rh: RequestHeader) = "abc"
}

class MyModel[A](val name: String, request: Request[A]) extends WrappedRequest[A](request)

class MyAction @Inject()(userService: UserService) extends ActionBuilder[MyModel] {
  def invokeBlock[A](request: Request[A], block: (MyModel[A]) => Future[Result]) = {
    val abc = userService.loadAbc(request)
    block(new MyModel(abc, request))
  }
}

@Singleton
class Application @Inject() (myAction: MyAction) extends Controller {
  def index = myAction { request =>
    Ok(request.name)
  }
}

你不能使用object因为这违反了 Guice 的设计。object是由 Scala 本身实例化的单例,不能有实例变量,而 Guice 需要能够动态实例化类,以便可以注入依赖项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在游戏中使用 ActionBuilder 创建自定义 Action 时使用 guice 的相关文章

随机推荐

  • 信号量简单示例[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 谁能分享使用信号量的简单示例吗 如果
  • Type 对象属性的 TypeConverter

    我需要在属性网格中正确显示对象 我的班级看起来像这样 public class PropertyItem public PropertyDescription PropertyDescription get set Description
  • 如何在打字稿中使用枚举作为索引键类型?

    考虑下面的例子 enum DialogType Options Help class Dialog test string return class Greeter openDialogs key in DialogType Dialog
  • 如何编辑 mp3 文件详细信息 (Delphi)

    我如何使用 delphi 编辑 mp3 文件详细信息 例如描述 标题 副标题 评级 艺术家 有什么组件可以做到这一点吗 谢谢 您也许不仅可以操作 ID3V1 还可以操作 ID3V2 所以 这个库可以帮助你 http www 3delite
  • JSON 对象被 Javascript 重新排序

    我有一个通过 PHP 生成的相当大的 JSON 对象 它从数据库中创建一个 PHP 对象 其键为整数 即 1 100 但这些键并不是按这个顺序排列的 它们是随机排列的 例如 55 72 5 8 14 32 64 等 然后我使用 json e
  • 如何在Java中重写数组的equals?

    我希望覆盖 int 数组的 equals 使得以下内容为真 int a 1 2 3 int b 1 2 3 System out println a equals b 有没有办法做到这一点 覆盖equals的方法int 既不可能 也没有必要
  • 在 Visual Studio 2012 中将新的异步/等待模式与 Windows 窗体设计器结合使用

    我正在尝试在 Visual Studio 2012 中使用新的 Async Await 模式实现异步调用 当我设置表单 使用表单设计器 然后尝试使用异步方法作为事件处理程序时 编译器会抱怨函数不返回 void 该方法应该返回一个任务 这就是
  • 在Python中合并具有不同文件名的CSV文件[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我对Python真的很陌生 所以这个问题可能有点基础 我有 44 个 csv 文件 它们具有相同的标题和不同的文件名 我想将它们全部合并到
  • 只从 URL 中获取域名?

    我正在尝试从 URL 字符串中提取域名 我几乎拥有它 我正在使用 URI 我有一个字符串 我的第一个想法是使用 Regex 但后来我决定使用 URI 类 我需要将上面的内容转换为 google com 和 google 而不带 www 我做
  • Flutter:定义自定义 TextStyles 以在整个应用程序中使用

    如何定义一小组自定义文本样式 然后可以在我的应用程序中重复使用它们 自定义文本样式应基于主题中定义的文本样式 我知道如何创建单独的 TextStyles 例如 Theme of context textTheme title copyWit
  • C++ 标准在哪里描述了指向原语的指针的转换?

    在优秀的博客文章中每个程序员都应该了解关于未定义行为的知识 http blog llvm org 2011 05 what every c programmer should know html 违反类型规则 部分说 将 int 转换为 f
  • Laravel PHPUnit 返回 404

    对于 Laravel API 我已经编写了测试用例 但每当我运行测试用例时 它总是失败并出现以下错误 1 Tests Feature CompanyTest orgTest Expected status code 200 but rece
  • Windows 上 R 包的 Conda 构建本地安装包

    我正在尝试在 Windows 上的 Conda 中构建自定义 R 包 源是本地 github 存储库 因为远程存储库是私有的 一切似乎都很顺利 但包最终大小为 9kb 并在构建时安装在本地计算机上 也就是说 上传到 Anaconda org
  • lambda 参数解包错误

    在 Python 2 中 这段代码没问题 f lambda m k m k m 1 2 3 4 k 5 6 7 8 print map f zip m k 但在Python 3中出现了以下错误 f lambda m k m k Syntax
  • C# 查找发件人

    private void buttonCheck object sender EventArgs e Type x sender GetType var y Activator CreateInstance x sends me back
  • Discord.js 与服务器机器人成员计数分开显示服务器用户计数

    我正在尝试为我的 Discord js 机器人创建一个 serverinfo 命令 我正在尝试将 Discord 服务器用户计数与服务器的机器人计数分开 我被告知要使用 filter但我不明白如何从用户计数中过滤机器人计数 好吧从guild
  • 获取当前 pthread cpu 使用率 Mac OS X

    在 Mac OS X 中如何从线程本身获取线程的 cpu 时间 对于linux 我所做的是getrusage RUSAGE THREAD ru 但此解决方案不适用于 Mac OS X 我遇到了这个question https stackov
  • 当我从文件读取地图时,Haskell 比 Python 需要更多的内存。为什么?

    我用Python编写了这个简单的代码 input open baseforms txt r encoding utf8 S for i in input words i split S update j words 0 for j in w
  • 为什么 System.Drawing.Bitmap 构造函数中的“stride”必须是 4 的倍数?

    我正在编写一个应用程序 需要我采用专有位图格式 MVTec Halcon HImage 并将其转换为 C 中的 System Drawing Bitmap 除了使用 获取指针 函数之外 提供给我的唯一可以帮助我执行此操作的专有函数涉及写入文
  • 在游戏中使用 ActionBuilder 创建自定义 Action 时使用 guice

    使用 ActionBuilder 创建自定义 Action 时如何使用 guice 如果我将 ActionBuilder 从对象更改为类 它似乎会抱怨 未找到 值 MyAction 我有这个 但它不起作用 case class MyMode