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 el directorio de configuración del complemento: ./Config/ O ./config/<Plugin#id>/ dependiendo de ConfigDir#sharedRoot()
ConfigurationLoader<CommentedConfigurationNode>
Debe estar anotado con @DefaultConfig. Se usa para inyectar un ConfigurationLoader pregenerado para el File 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.

Si bien es completamente posible recuperar el objeto Game a través de Sponge.getGame (), es obtenido comúnmente a través de 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. La mayor diferencia es que @DefaultConfig se refiere a un archivo específico, mientras que @ConfigDir se refiere a un directorio.

Truco

Vea Configurando Extensiones para obtener una guía completa, específicamente para``@DefaultConfig``.