2015-04-16 55 views
1

在Grails中,服務默認爲單例。我能保持這種狀態,並仍然從控制器創建該服務的內部類的實例嗎?Grails創建內部服務類的實例

//by default grails makes MyTestService a singlton 
class MyTestService{ 

    public class InnerTest{ 
      String msg; 
      def addMsg(String str){ 
       this.msg=str; 
      } 
      def printMsg(){ 
      println this.msg; 
     } 
    } 

} 

在控制器 「myController的」 ...

def m=myTestService.getInstance().new InnerTest(); 
//produces " MyTestService.InnerTest cannot be cast to MyTestService.InnerTest" 

def m=myTestService.new InnerTest(); 
//No signature of method:MyController.InnerTest() 
+0

是的,它產生的錯誤在代碼註釋中。由於服務的單例性質,是不是可能會出錯? – user2782001

回答

1

你應該能夠做這樣的事情:

class MyTestService{ 

    public class InnerTest{ 
      String msg; 
      def addMsg(String str){ 
       this.msg=str; 
      } 
      def printMsg(){ 
      println this.msg; 
     } 
    } 

    def InnerTestFactory() { 
     new InnerTest() 
    } 

} 

從你的控制器使用方法:

def m=myTestService.InnerTestFactory(); 
+0

我現在就來測試.... – user2782001

+0

仍然使用InnerTestFactory方法 – user2782001

+0

仍然得到「沒有方法簽名:MyTestService.InnerTest()」靜態類也沒有工作。 – user2782001