2014-09-02 62 views
2

我正在尋找最好的語法,因爲包含類拿起他們包含的類暴露的含蓄嗎?消費類隱含消費類

我該方案具有抽象測試兩個依賴:應用程序的actorsystem的創造,這種情況發生,要求actorsystem以及一個Web客戶端:

trait Core { 
    implicit def system: ActorSystem 
} 

trait WebClient { 
    implicit def system: ActorSystem 
} 

trait Api extends WebClient { 
    ... 
} 

trait Server extends Core { 
    def api: Api 
    val service = system.actorOf(Props(new Service(api))) 
} 

現在,我創建了一個新的應用,該應用提供在actorsystem和API,但是API需要一個隱含的actorsystem,我已經想通了,唯一的方法就是手動提供這樣的:

object ServerApp extends App with Core { 

    implicit val system = ActorSystem("foo") 

    val api = new Api { 
    override implicit def system = implicitly[ActorSystem] 
    } 

} 

是否有其Web客戶端撿起隱含一個更好的語法核心?我不能讓它擴展Core,因爲它是由Core實現包含的,並且需要作爲其中包含的其他內容的依賴項。但override implict def system = implicitly[ActorSystem]似乎相當hamfisted某些應該是,呃,暗含

+0

'對象ServerApp擴展應用程序與Server'? – 2014-09-02 02:57:19

回答

2

因爲他們具有相同的名稱,你隱藏的隱式值。

你可能會考慮

class Api()(implicit val system: ActorSystem) 

val api = new Api