我遇到的大多数 Cake Pattern 示例似乎都将依赖关系视为单例类型的服务。在组件的最终组装中,每种类型只有一个实例。当使用 Cake Pattern 进行依赖注入时,是否可以编写具有多个特定类型实例的配置,可能以不同的方式配置?
考虑以下组件。通用 HTTP 服务:
trait HttpService { def get(query:String):String }
trait HttpServiceComponent {
val httpService:HttpService
class HttpServiceImpl(address:String) extends HttpService {
def get(query:String):String = ...
}
}
Trade & Company 服务,每个都依赖于 HttpService,它们可能是不同的实例:
trait TradeService { def lastTrade(symbol:String):String }
trait TradeServiceComponent {
this:HttpServiceComponent => // Depends on HttpService
val tradeService:TradeService
class TradeServiceImpl extends TradeService {
def lastTrade(symbol:String):String =
httpService.get("symbol=" + symbol)
}
}
trait CompanyService { def getCompanySymbols(exchange:String):String }
trait CompanyServiceComponent {
this:HttpServiceComponent => // Depends on different HttpService instance
val companyService:CompanyService
class CompanyServiceImpl extends CompanyService {
def getCompanySymbols(exchange:String):String =
httpService.get("exchange=" + exchange)
}
}
依赖于 Trade & Company 服务的主要应用程序组件:
trait App { def run(exchange:String):Unit }
trait AppComponent {
this:CompanyServiceComponent with TradeServiceComponent =>
val app:App
class AppImpl extends App {
def run(exchange:String) =
companyService.getCompanySymbols(exchange).split(",").foreach(sym => {
val lastTrade = tradeService.lastTrade(sym)
printf("Last trade for %s: %s".format(sym, lastTrade))
})
}
}
是否可以连接应用程序,使其 TradeService 使用指向一个地址的 HttpService,而其 CompanySerivce 使用指向另一个地址的不同 HttpService 实例?