Guice имеет концепцию Scope , обычно используемую для запроса веб-сервера.
Являются ли Scopes жизнеспособными для использования в долгоживущих объектах, жизненный цикл которых может быть асинхронным по сравнению стекущий код?
Например, Sponge и Bukkit предоставляют события, которые срабатывают, когда мир загружается / выгружается.
Эти миры затем ставятся и отмечаются различными событиями.
Стоит ли использовать аннотации Scopes и Scoping для того, чтобы иметь аннотацию, которая принимает параметр, для внедрения / инициализации сервисов / специфичных для мира слушателей всякий раз, когда мир загружается и выгружается?
public abstract class WorldService {
World world;
public WorldService(World world) {
this.world = world;
}
abstract void tick();
abstract void start();
abstract void stop();
public static class TimeTracker extends WorldService {
private final Logger logger;
private int count;
@Inject
public TimeTracker(World world, Logger logger) {
super(world);
this.logger = logger;
}
@Override
void tick() {
count++;
}
@Override
void start() {
count = 0;
}
@Override
void stop() {
logger.debug("World loaded for "+count+" ticks");
}
}
}