在模块中定义自定义绑定
依赖注入的基本用法是通过注释完成的。当你需要稍微调整一下时,你需要自定义代码来进一步指定你希望如何实例化和注入某些类。这段代码放在所谓的模块中。
import com.google.inject.AbstractModule
// Play will automatically use any class called `Module` that is in the root package
class Module extends AbstractModule {
override def configure() = {
// Here you can put your customisation code.
// The annotations are still used, but you can override or complete them.
// Bind a class to a manual instantiation of it
// i.e. the FunkService needs not to have any annotation, but can still
// be injected in other classes
bind(classOf[FunkService]).toInstance(new FunkService)
// Bind an interface to a class implementing it
// i.e. the DiscoService interface can be injected into another class
// the DiscoServiceImplementation is the concrete class that will
// be actually injected.
bind(classOf[DiscoService]).to(classOf[DiscoServiceImplementation])
// Bind a class to itself, but instantiates it when the application starts
// Useful to executes code on startup
bind(classOf[HouseMusicService]).asEagerSingleton()
}
}