2016-03-27 39 views
2

Ben daha Http().bindAndHandle geçirilen edilemez öğelerin listesi olarak çalışmıyor kodunun üzerinde açıkçaAkka-http yollarını bir özellik kullanarak nasıl topluyorsunuz?

object SMController { 
    def aggregateRoutes(actorSystem: ActorSystem): List[Route] = { 
    val runtimeMirror = universe.runtimeMirror(getClass.getClassLoader) 
    val reflections = new Reflections("com.example.api") 
    val subclasses = reflections.getSubTypesOf(classOf[Routable]) 
    val routesList = new ListBuffer[Route]() 

    for (i <- subclasses) { 
     val module = runtimeMirror.staticModule(i.getName) 
     val obj = runtimeMirror.reflectModule(module) 
     val someTrait: Routable = obj.instance.asInstanceOf[Routable] 
     routesList += someTrait.getAllRoutes(actorSystem) 
    } 

    routesList.toList 
    } 
} 

var, çalışma zamanında bir özellik kullanılarak agrega yolları çalışıyorum.

Benim sorum şu ki, List[Routes]'u bir Http().bindAndHandle kabul eder nasıl ayrıştırabilirim veya yolları Routable alt sınıflarından dinamik olarak nasıl yükleyebilirim?

cevap

3

foldLeft:

val routes = SMController.aggregateRoutes(system) 
val bindingFuture = Http().bindAndHandle(
     routes.tail.foldLeft(routes.head)((a, b) => a ~ b), "localhost", 8080) 

reduceLeft şöyle ben, yolları foldLeft ve tüm yolları birleşmeye başarmış:

routes.reduceLeft(_ ~ _)