Компоненты Singleton Dagger2

Я использую Dagger2 в проекте google appengine, и у меня есть несколько сервлетов, которые используют, как и должно быть, одноэлементный экземпляр данного объекта (MyObject).

@Singleton
@Component(modules = {MyModule.class})
public interface MyComponent {
  IMyObject object();
}

Затем мне нужно, чтобы DaggerMyComponent.create() также был одноэлементным, чтобы я мог получить один и тот же IMyObject для всех сервлетов. Для этого я добавил

DaggerMyComponent INSTANCE = DaggerMyComponent.create()

к моему интерфейсу MyComponent. Тем не менее, это по-прежнему позволяет повторно вызывать create() по ошибке, и это не обязательно выглядит для меня красивым решением.

Любые идеи?

Спасибо!


person Pedro Ribeiro    schedule 11.06.2015    source источник


Ответы (1)


К сожалению, в документах говорится, что Dagger не предоставляет такого ограничения для версии 2.0.1.

Чтобы получить правильное поведение, связанное с аннотацией области действия, вызывающий объект обязан создавать новые экземпляры компонентов, когда это необходимо. Например, компонент Singleton должен создаваться только один раз для каждого приложения, тогда как экземпляр компонента RequestScoped должен создаваться один раз для каждого запроса.

http://google.github.io/dagger/api/latest/dagger/Component.html

person riwnodennyk    schedule 12.06.2015