当方法需要创建新对象时,有关依赖注入的新手问题

WW.*_*WW. 7 language-agnostic dependency-injection

我一直在阅读关于依赖注入的问题并且有一个简单的问题.我可以理解如何通过构造函数或setter注入所需的依赖项由DI框架自动装配.当对象决定由于某些业务流程而需要创建新对象时会发生什么?在这些情况下,我是否需要始终创建工厂?为了使它成为一个不那么抽象的问题,这里有一个例子.

假设我正在写一个Asteriods游戏.中间有一艘船可以旋转并射击星号.假设已经创建了船并注入了适当的东西.当playerShip.shoot()被调用时,我们需要创建一个bullet对象.项目符号对象需要知道它的去向(direction以及从哪里开始(point).

通常,我会做这样的事情:

bullet = new Bullet( direction, point );
Run Code Online (Sandbox Code Playgroud)

但是,这将PlayerShip类与Bullet类紧密耦合.这应该如何在依赖注入下工作?我是否需要创建一个BulletFactory接口并将其实现注入到船中?

编辑:我实际上并没有写asteriods.这是一个我认为人们会理解的简单例子.我想要一些需要创建一个运行时(而不是"连接对象")的东西,它也有它的构造函数的参数.

byt*_*der 3

取决于你是否只拥有一种子弹类型......

如果只有一个,我会说你没问题。

但如果您有Bullet、DoubleBullet、PowerBullet、NukeBullet 等。

然后我将创建 Bullet 基类和所有其他派生类

然后我会创建 Bullet 工厂,它会有 CreateBullet、CreatePowerBullet 等。

另一个问题是还有什么东西可以制造子弹吗?如果是这样,那么我会创建一个工厂来将创建逻辑整合到一个地方......

否则,这听起来就像你只是为了使用 DI 而使用 DI...