如何在grails中注入与任何域类无关的自定义服务?

问题描述 投票:0回答:1

我希望在我的grails项目中创建DAO层,该层与任何域类无关,并且将与我项目的辅助数据库进行交互。当我尝试在任何控制器中注入服务时,我收到以下错误:

"Cannot invoke method abc() on null object"

但是,当我使用控制器中的new关键字初始化服务时,错误得到解决并且工作正常,但我知道这不应该是必要的,因为grails应该处理它。谁能告诉我我错过了什么?

grails service dao
1个回答
0
投票

我不认为该问题与服务是否与域类相关联有任何关系。 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)与服务类名称匹配,但是使用小写的第一个字母(更一般地,确保属性名称与服务类名称的属性名称表示匹配,这通常是像下壳一样简单的类名的第一个字母)。

© www.soinside.com 2019 - 2024. All rights reserved.