trait Registry { val ec:ExecutionContext val userService = new UserServiceImpl(ec) val fooBarService = new FoobarServiceImpl(userService) } class RestActor extends Registry with UserRoutes { def receive = { userRoutes ~ otherRoutesFromOtherMixins } } trait AccessDirectives extends Directives { self: Registry => val letMeIn:Directive1[Option[User]] = optionalHeaderValueByName("user_auth").hflatMap { case Some(id) :: HNil => onSuccess(userService.get(id)) case _ => reject() } } trait UserRoutes extends AccessDirectives with HttpService { self: Registry => val userRoutes = { path(Segment){ userId => onSuccess(userService.get(userId)){ user => complete(user) } } } }