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 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.

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``.