Grails根据环境将Service注入Controller
Grails inject Service into Controller dependant on environment
我在控制器中遇到这样一种情况,我在 if(Environment.Current == Environment.PRODUCTION)
块中包围了代码片段,因为代码块正在调用 restService
中的 methodA
进行 REST 调用URL 仅当应用程序部署到特定生产服务器时才可用。但是这样做意味着在 运行 测试时无法访问代码区域,这让我有点不舒服。
在开发环境中,我不关心对 methodA
的调用,因为我正在删除 methodA
会 return 并将其传递给下一个控制器,因此将 if 语句更改为 if(Environment.Current != Environment.DEVELOPMENT)
可以让我更好地测试代码,而不必调用我在开发过程中无法到达的地方。
理想情况下,我想尝试将服务注入依赖于 grails 环境的控制器;所以我可以有两个这样的服务:
class RestService {
def methodA() {
// go do a REST call
}
}
和
class FakeRestService() {
def methodA() {
// return some stubbed response
}
}
在我的控制器中 restService
在开发和测试环境中是 FakeRestService
的实例,在生产环境中是 RestService
的实例
class SearchController {
def restService
def index() {
restService.methodA()
}
我对如何以 'Grailsy'/Spring 方式实现这一目标感到困惑。我一直在研究创建某种服务工厂,它将 return RestService
或 FakeRestService
的实例取决于环境,但如果我能定义什么服务就好了在配置或类似的东西中注入 restService
。
任何建议都会很棒!
当环境为 TEST 时,您可以在 resources.groovy
中为 bean 名称添加别名。
import grails.util.Environment
beans = {
if ( Environment.current == Environment.TEST ) {
springConfig.addAlias 'restService', 'fakeRestService'
}
}
RuntimeSpringConfiguration
由 getSpringConfig()
在 resources.groovy 中提供。
这里是 dmahapatro 答案的更 Grails-y 版本:
import grails.util.Environment
beans = {
Environment.executeForCurrentEnvironment {
environments {
development {
springConfig.addAlias 'restService', 'fakeRestService'
}
}
}
}
我在控制器中遇到这样一种情况,我在 if(Environment.Current == Environment.PRODUCTION)
块中包围了代码片段,因为代码块正在调用 restService
中的 methodA
进行 REST 调用URL 仅当应用程序部署到特定生产服务器时才可用。但是这样做意味着在 运行 测试时无法访问代码区域,这让我有点不舒服。
在开发环境中,我不关心对 methodA
的调用,因为我正在删除 methodA
会 return 并将其传递给下一个控制器,因此将 if 语句更改为 if(Environment.Current != Environment.DEVELOPMENT)
可以让我更好地测试代码,而不必调用我在开发过程中无法到达的地方。
理想情况下,我想尝试将服务注入依赖于 grails 环境的控制器;所以我可以有两个这样的服务:
class RestService {
def methodA() {
// go do a REST call
}
}
和
class FakeRestService() {
def methodA() {
// return some stubbed response
}
}
在我的控制器中 restService
在开发和测试环境中是 FakeRestService
的实例,在生产环境中是 RestService
的实例
class SearchController {
def restService
def index() {
restService.methodA()
}
我对如何以 'Grailsy'/Spring 方式实现这一目标感到困惑。我一直在研究创建某种服务工厂,它将 return RestService
或 FakeRestService
的实例取决于环境,但如果我能定义什么服务就好了在配置或类似的东西中注入 restService
。
任何建议都会很棒!
当环境为 TEST 时,您可以在 resources.groovy
中为 bean 名称添加别名。
import grails.util.Environment
beans = {
if ( Environment.current == Environment.TEST ) {
springConfig.addAlias 'restService', 'fakeRestService'
}
}
RuntimeSpringConfiguration
由 getSpringConfig()
在 resources.groovy 中提供。
这里是 dmahapatro 答案的更 Grails-y 版本:
import grails.util.Environment
beans = {
Environment.executeForCurrentEnvironment {
environments {
development {
springConfig.addAlias 'restService', 'fakeRestService'
}
}
}
}