【发布时间】:2012-06-30 17:52:54
【问题描述】:
我最近看到了 Dead-Simple Dependency Injection 和 Dependency Injection Without the Gymnastics 与 Monads 关于 DI 的会谈,印象深刻。我试图将它应用于一个简单的问题,但一旦它变得不平凡就失败了。我真的很想看到依赖注入的运行版本在哪里
- 依赖于多个必须注入的值的类
- 一个依赖于某个类的类,该类依赖于要注入的东西
如下例所示
trait FlyBehaviour { def fly() }
trait QuackBehaviour { def quack() }
trait Animal { def makeSound() }
// needs two behaviours injected
class Duck(val flyBehaviour: FlyBehaviour, val quackBehaviour: QuackBehaviour) extends Animal
{
def quack() = quackBehaviour.quack()
def fly() = flyBehaviour.fly()
def makeSound() = quack()
}
// needs an Animal injected (e.g. a Duck)
class Zoo(val animal: Animal)
// Spring for example would be able to provide a Zoo instance
// assuming a Zoo in configured to get a Duck injected and
// a Duck is configured to get impl. of FlyBehaviour and QuackBehaviour injected
val zoo: Zoo = InjectionFramework.get("Zoo")
zoo.animal.makeSound()
看到使用阅读器 Monad 的示例实现真的很有帮助,因为我只是觉得我错过了朝着正确方向的推动。
谢谢!
【问题讨论】:
标签: scala dependency-injection functional-programming monads