Estoy creando un servicio de grises que interactuará con una API REST de un tercero a través de una biblioteca Java. La biblioteca Java requiere credenciales para la API REST por medio de una url, nombre de usuario y contraseña.Inyectar la aplicación de aplicación de grises en el servicio
Me gustaría almacenar estas credenciales en configuration/Config.groovy
, ponerlas a disposición de un servicio y garantizar que las credenciales estén disponibles para el servicio antes de que las requiera.
I apreciarán que grailsApplication.config
está disponible para los controladores y que a través de un método de un servicio de los valores de configuración relevantes se pueden proporcionar para el servicio, como este:
package example
class ExampleController {
def exampleService
def index = { }
def process = {
exampleService.setCredentials(grailsApplication.config.apiCredentials)
exampleService.relevantMethod()
}
}
package example
import com.example.ExampleApiClient;
class ExampleService {
def credentials
def setCredentials(credentials) {
this.credentials = credentials
}
def relevantMethod() {
def client = new ExampleApiClient(
credentials.baseUrl,
credentials.username,
credentials.password
)
return client.action();
}
}
Siento que este enfoque es un poco defectuoso ya que depende de un controlador que llame al setCredentials()
. Tener las credenciales disponibles para el servicio automágicamente sería más sólido.
(no me la actualidad lo suficientemente familiarizado con griales) ¿Es alguna de estas dos opciones viables:
Inyectar
grailsApplication.config.apiCredentials
en el servicio en el controlador cuando se crea el servicio?Proporcione algún tipo de contructor en el servicio que permita pasar las credenciales al servicio en el momento de creación de instancias?
Tener las credenciales inyectadas en el servicio es ideal. ¿Como se puede hacer esto?
seguiría siendo bueno si hubiera alguna manera de inyectar las propiedades de configuración reales en lugar de todo el objeto grailsApplication. –