Назад к вопросам
Middle+
132
questionbank

Что такое Scope в Dagger и как создать кастомный Scope?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Scope в Dagger определяет время жизни объектов в графе зависимостей. Объекты, помеченные одним и тем же Scope, будут созданы один раз внутри этого Scope и использоваться повторно на протяжении всего его существования.

Примеры встроенных Scope: @Singleton, @ActivityScope (часто используется в примерах, но не является частью стандартной библиотеки Dagger).

Для создания кастомного Scope нужно объявить аннотацию с мета-аннотацией @Scope:

@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomScope {
}

Затем этот Scope применяется к компоненту и модулям/провайдерам, чьи объекты должны иметь это время жизни:

@MyCustomScope
@Component(modules = MyModule.class)
public interface MyComponent {
    // Методы получения зависимостей
}
@Module
public class MyModule {
    @Provides
    @MyCustomScope
    MyObject provideMyObject() {
        // Логика создания объекта
        return new MyObject();
    }
}

Компонент с кастомным Scope создает синглтоны в рамках своего собственного времени жизни. Пока существует экземпляр этого компонента, объекты, помеченные его Scope, будут использоваться повторно. При уничтожении компонента и создании нового, новые экземпляры скоупированных объектов будут созданы снова.