2017-04-04 4 views
1

Was ich versuche, ist eine benutzerdefinierte Trikot @Context für meine Methoden, genau wie this question, aber in Scala.Jersey 2.x @ Context/Dependency Injection in Scala

Java Art und Weise aus der obigen Beitrag:

import javax.inject.Inject; 
import javax.ws.rs.container.ContainerRequestContext; 
import jetty.plugin.test.domain.MyObject; 
import org.glassfish.hk2.api.Factory; 

public class MyObjectFactory implements Factory<MyObject> { 

    private final ContainerRequestContext context; 

    @Inject 
    public MyObjectFactory(ContainerRequestContext context) { 
     this.context = context; 
    } 

    @Override 
    public MyObject provide() { 
     return (MyObject)context.getProperty("myObject"); 
    } 

    @Override 
    public void dispose(MyObject t) {} 
} 

den Weg Scala Versuch:

class MyObjFactory(ctr: ContainerRequestContext) extends Factory[MyObj] { 
    private final val context: ContainerRequestContext = ctr 

    override def provide(): MyObj = context.getProperty("customObj").asInstanceOf[MyObj] 

    override def dispose(obj: MyObj): Unit = { } 
} 

Das Problem hier ist, ich weiß nicht, wo die @Inject Anmerkung zu setzen. Mein begrenztes Verständnis von Scala ist, dass alles in der Klassendeklaration ein Konstruktorblock ist, so dass ich @Inject nicht verwenden kann, um die MyObjectFactory Konstruktormethode wie in Java zu kommentieren.

Gehe ich gerade falsch?

Antwort

1

Anmerkungen geht mit dem Konstruktor:

import javax.inject.Inject 

class MyObjFactory @Inject()(ctr: ContainerRequestContext) extends Factory[MyObj] { 

    private final val context: ContainerRequestContext = ctr 

    override def provide(): MyObj = context.getProperty("customObj").asInstanceOf[MyObj] 

    override def dispose(obj: MyObj): Unit = {} 

} 
Verwandte Themen