Inyección de Dependencia
Sponge usa inyecciones de dependencia para proveer a los plugins de ciertas instancias de API. Las inyecciones de dependencia permiten a los plugins designar algunos tipos de API que serán inyectados después de la construcción.
Lista Temporal de Tipos Inyectados
- ConfigDir (anotación en Ruta o Archivo)
Usado para inyectar los directorios de configuración de los complementos:
./mods/
OR./mods/<Plugin#id>/
dependiendo del ConfigDir#sharedRoot()- ConfigurationLoader<CommentedConfigurationNode>
Debe estar anotado con
@DefaultConfig
. Se usa para inyectar unConfigurationLoader
pregenerado para elFile
de la misma anotación.- DefaultConfig (anotación en Path, ConfigurationLoader o File)
Se usa para inyectar el archivo de configuración específico del complemento:
<Plugin#id>.conf
- EventManager
Administra el registro de los controladores de eventos y el envío de eventos.
- Archivo
Debe anotarse con
@DefaultConfig
o@ConfigDir
. Dependiendo de la anotación dada, esto contendrá una referencia de archivo al archivo de configuración por defecto de los complementos o al directorio utilizado para almacenar los archivos de configuración. Sin embargo, la Ruta (ver a continuación) debe ser preferida.- Game
El objeto
Game
es el acceso principal de SpongeAPI.- GameRegistry
Proporciona una manera fácil de recuperar tipos provenientes de un
Game
.- GuiceObjectMapperFactory
Una herramienta proporcionada por Configurate para permitir un mapeo más fácil de los objetos a los nodos de configuración. Ver Serializando Objetos para su uso.
- Inyector
com.google.inject.Injector
está disponible desde Guice, es el inyector que se usó para inyectar las dependencias de su plugin. Usted puede usarlo para crear un inyector hijo con su propio módulo para inyectar sus propias clases con las dependencias provistas por Sponge listadas en esta página, o configurar sus propias clases- Logger
Se usa para identificar el complemento desde el cual son enviados los mensajes registrados.
- Ruta
Debe anotarse con
@DefaultConfig
o@ConfigDir
. Dependiendo de la anotación dada, esto contendrá una referencia de ruta al archivo de configuración por defecto de los complementos o al directorio utilizado para almacenar los archivos de configuración.- PluginContainer
Un envoltorio de clase Plugin, utilizado para recuperar información de la anotación para facilitar su uso.
- PluginManager
Administra los complementos cargados por la implementación. Puede recuperar otro
PluginContainer
del complemento.
Ejemplos de Inyección
Hay algunas referencias que son difíciles de obtener -o, en algunos casos, imposibles - sin inyección. Si bien estos pueden no ser absolutamente vitales para cada complemento, se utilizan con bastante frecuencia.
Nota
Recuerde que es casi siempre la mejor práctica para inyectar sus objetos dentro de la clase principal, ya que es instanciado con el inyector Guice cuando el complemento es cargado.
Logger
Truco
Vea Registro y Depuración para obtener una guía completa, específicamente para Logger.
Juego
El objeto Game
es la apertura de muchas de las funciones internas de SpongeAPI, desde EventManager
a Server e incluso el Scheduler de Sync/Async.
Es completamente posible recibir el objeto Game
a través de la mayoría de eventos, sin embargo es comúnmente obtenido mediante una inyección.
Ejemplo - Campo
import com.google.inject.Inject;
import org.spongepowered.api.Game;
@Inject
private Game game;
Ejemplo - Método
private Game game;
@Inject
private void setGame(Game game) {
this.game = game;
}
Ejemplo - Constructor
Para el propósito de este tutorial, «Apple» es el nombre de la clase.
private Game game;
@Inject
public Apple(Game game) {
this.game = game;
}
Directorio de Configuración
La forma recomendada de obtener su archivo de configuración es a través de Guice, junto con la anotación ConfigDir.
Truco
Si usted configura sharedRoot
como `` true``, su ConfigDir
será el mismo directorio que -potencialmente- albergue la configuración de otros complementos. En la mayoría de los casos donde se requiere el ConfigDir
, esto debería ser falso
.
Ejemplo - Campo
import org.spongepowered.api.config.ConfigDir;
import java.nio.file.Path;
@Inject
@ConfigDir(sharedRoot = false)
private Path configDir;
Ejemplo - Método
private Path configDir;
@Inject
@ConfigDir(sharedRoot = false)
private void setConfigDir(Path configDir) {
this.configDir = configDir;
}
Ejemplo - Constructor
Para los fines de este tutorial, «Orange» es el nombre de la clase.
private Path configDir;
@Inject
public Orange(@ConfigDir(sharedRoot = false) Path configDir) {
this.configDir = configDir;
}
Configuración Predeterminada
La forma en que funciona @DefaultConfig
es muy similar a @ConfigDir
. Siendo obviamente la mayor diferencia que @DefaultConfig
hace referencia a un archivo especifico, mientras @ConfigDir
hace referencia a un directorio.
Truco
Vea Configurando Extensiones para obtener una guía completa, específicamente para``@DefaultConfig``.