Scala Language
依存性注入
サーチ…
内部実装クラスを持つCakeパターン。
//create a component that will be injected
trait TimeUtil {
lazy val timeUtil = new TimeUtilImpl()
class TimeUtilImpl{
def now() = new DateTime()
}
}
//main controller is depended on time util
trait MainController {
_ : TimeUtil => //inject time util into main controller
lazy val mainController = new MainControllerImpl()
class MainControllerImpl {
def printCurrentTime() = println(timeUtil.now()) //timeUtil is injected from TimeUtil trait
}
}
object MainApp extends App {
object app extends MainController
with TimeUtil //wire all components
app.mainController.printCurrentTime()
}
上記の例では、MainControllerにTimeUtilを注入する方法を示しました。
最も重要な構文は、 TimeUtil
をMainController
に挿入するための自己注釈( _: TimeUtil =>
) MainController
。つまり、 MainController
はMainController
依存しTimeUtil
。
私の考えでは、内部クラスを模擬することができるようにテストする方が簡単だから、各コンポーネントで内部クラス( TimeUtilImpl
)を使用します。また、プロジェクトがより複雑になるときにメソッドが呼び出される場所をトレースすることも簡単です。
最後に、すべてのコンポーネントをまとめて配線します。あなたがGuiceに慣れているなら、これはBinding
相当します
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow