7

के साथ फ्रेमवर्क पाथबिंडेबल प्ले करें मैं स्कैला प्ले एप्लिकेशन को 2.5 पर माइग्रेट कर रहा हूं और वर्तमान में अपने घटकों को निर्भरता इंजेक्शन में ले जा रहा हूं। एक जगह बाकी है जहां मुझे नुकसान हुआ है हालांकि इसे कैसे किया जाए। मैं एक PathBindable अंतर्निहित रूपांतरण साथी वस्तु में परिभाषित किया गया है:निर्भरता इंजेक्शन

object Task { 
    implicit def pathBindable(implicit stringBinder: PathBindable[String]) = 
    new PathBindable[Task] { 
     ... 
    } 
} 

PathBindable के कार्यान्वयन भंडार से वस्तु को देखने के लिए की जरूरत है, लेकिन मैं एक तरह से करने के लिए भंडार यहाँ निर्भरता इंजेक्षन नहीं मिली है। एक कामकाज के रूप में मैं अब बहिष्कृत प्ले ऑब्जेक्ट का उपयोग कर रहा हूं:

val tasks = Play.application(Play.current).injector.instanceOf[TasksRepository] 

कोई भी विचार इसे ठीक से कैसे हल करें?

उत्तर

3

According to Lightbend Engineer Greg Methvin, पथबिंडेबल केवल पथ में राज्य पर निर्भर होना चाहिए। कारण यह है कि कोड runs on the IO thread और इसलिए तेज़ होना चाहिए और ब्लॉक नहीं करना चाहिए।

0

मुझे लगता है कि यह एकमात्र तरीका है जिससे आप वस्तुओं में इस तरह की सामग्री तक पहुंच सकते हैं। आशा है कि आप विचार प्राप्त

class TaskPathBinder @Inject() (tasks : TaskRepository) extends PathBindable[Task]{ 
    // implementiation 
} 

और की तुलना में इस

class NeedsTaskPathBinder @Inject() (service : SomeSerive) (implicit taskPathBinder : TaskPathBinder) { 

    ... 

} 

जैसी सेवाओं में यह इंजेक्षन:

एक बेहतर विचार इस तरह एक ट्रांसफॉर्मर बनाने के लिए है।

+1

एचएम, समस्या यह है कि निहित मार्गों के लिए उपलब्ध होना आवश्यक है ताकि मैं इसका उपयोग कर सकूं: https://www.playframework.com/documentation/2.5.x/api/scala/index.html# play.api.mvc.PathBindable –

संबंधित मुद्दे