Scala 在生活游戏中使用依赖注入注入新规则

Scala 在生活游戏中使用依赖注入注入新规则,scala,dependency-injection,Scala,Dependency Injection,我有一个课程项目,是Scala生活游戏的重构。这是一个 简单的纯Scala+SBT项目。我的任务之一是提取游戏逻辑 从GameEngine类,更容易添加新规则,如康威、Highlife或 诸如此类。我将GameEngine转换为一个抽象类,并制作了所有 从中继承的类实现了决定细胞何时死亡或死亡的方法 重生。当我的游戏开始时,我有以下代码: def addGameMode(gameMode:GameEngine) { modes += gameMode } addGameMode(Conwa

我有一个课程项目,是Scala生活游戏的重构。这是一个 简单的纯Scala+SBT项目。我的任务之一是提取游戏逻辑 从
GameEngine
类,更容易添加新规则,如康威、Highlife或 诸如此类。我将
GameEngine
转换为一个抽象类,并制作了所有 从中继承的类实现了决定细胞何时死亡或死亡的方法 重生。当我的游戏开始时,我有以下代码:

def addGameMode(gameMode:GameEngine) {
  modes += gameMode
}

addGameMode(ConwayEngine)
addGameMode(EasyMode)
addGameMode(HighLife)
addGameMode(Seeds)
依赖于
GameEngine
规则的类将其作为 构造参数。当我需要更改游戏规则时,我会使用setter方法,比如 代码如下:

class GameView( var gameEngine: GameEngine, modes: MutableList[GameEngine] ) extends JFXApp {
...
  def setGameEngine(g: GameEngine) {
    gameEngine = g
  }
...
}
我不知道这种方法是否正确,但据我所知,依赖性 注射是正确的。但是,对我的老师来说,不是。于是我的问题开始了。 他认为,依赖关系应该在.xml文件中声明,并由 外部库。他推荐了
Spring
,但我不知道该如何实现 使用web框架的简单Scala+SBT项目中的依赖项注入。 希望我可以忽略这个建议,使用
Spring
并使用另一个lib。 我找到了,但我不知道怎么用
解决这个问题。有人能帮我吗?

你说你的DI实现是正确的。但如果我创建GameView的实例,我看不出会发生什么。程序将如何初始化游戏引擎和模式?如果其中一个还没有建造,会发生什么?顺便说一句,您也可以将Guice()视为DI框架。
gameEngine
的setter是不必要的,因为它已经是一个公共的
var
,这意味着Scala可以方便地为您定义一个
gameEngine
setter方法,您只需编写
gameView.gameEngine=…
。(不,将其私有化并添加
setGameEngine
方法不是Scala风格的好方法。)但我同意,仅仅将Spring用作DI框架可能没有意义。