bootstrap 中的 Grails 全局函数

Grails global function in bootstrap

我正在使用 Grails 2.1.0 并遇到了这个 2 岁的 post:Is there a way to make functions accessible across controllers in Grails?

在那里,Burt 建议创建一个函数,所有使用 Bootstrap 的控制器都可以访问该函数。我已经尝试过它的工作原理,但是每次我修改控制器(添加或删除您可能想到的任何东西)时,Grails 都会给我:

No signature of method: mycontroller.myfunctionfrombootstrap() is applicable for argument types: () values: []

这是 Grails 2.1.0 的 "feature" 吗?我错过了什么吗?

升级 Grails 不是一个选项。

在 bootstrap 我有:

for (controllerClass in grailsApplication.controllerClasses) {
    controllerClass.clazz.metaClass.myfunctionfrombootstrap= {
        return stuff; 
    }
}

当您在开发模式下修改控制器时,Grails 会重新编译它并插入新的 class 以替换以前的版本。但是 bootstrap 不会再 运行,所以新的 class 不会将您的额外功能添加到其元 class.

您应该考虑将可重用逻辑放入服务或标签库中,而不是使用元class。