我如何在圣杯中注入与任何域类无关的自定义服务



我希望在我的Grails Project中制作DAO层,该项目与任何域类都不关联,并且将与我项目的辅助数据库进行交互。当我尝试将服务注入任何控制器时,我会遇到以下错误:

"Cannot invoke method abc() on null object"

但是,当我使用控制器中的new关键字初始化服务时,解决了错误,并且可以很好地工作,但是我知道这是不必要的,因为Grails应该处理它。谁能告诉我我想念什么?

我认为该问题与该服务是否与域类关联无关。DI容器对此一无所知。

如果您有这样的控制器:

// grails-app/controllers/demo/SomeController.groovy
package demo
class SomeController {
    SomeService someService
    def someControllerAction() {
        someService.abc()
        // ...
    }
}

和这样的服务...

// grails-app/services/demo/SomeService.groovy
package demo
class SomeService {
    void abc() {
        // ...
    }
}

可以正常工作。

,几乎不可能确定不看到您的代码做什么错,但一种可能性就是这样,这是行不通的:

// grails-app/controllers/demo/SomeController.groovy
package demo
class SomeController {
    def someControllerAction() {
        // This is a local variable, not
        // a property and as such will not
        // be subjected to dependency injection.
        SomeService someService
        // ...
        someService.abc()
        // ...
    }
}

另外,请确保属性名称(上面的示例中的someService)与服务类名称匹配,但具有较低的案例首字母(更一般而言,请确保属性名称与服务类名称的属性名称表示,通常就像较低的外壳一样简单,班级名称的第一个字母)。

最新更新