Scope
A anotação @Scope()
define como um componente é registrado no container de injeção de dependências.
Por padrão, as classes são registradas como lazySingleton, ou seja, uma instância só é criada na primeira vez que for solicitada. Você pode alterar esse comportamento passando um BindType diferente para o @Scope()
.
Tipos de Bind
O enum BindType
define os tipos de vinculação disponíveis:
BindType.singleton
: Uma única instância é criada e compartilhada em todo o app.BindType.lazySingleton
(padrão): Uma única instância é criada de forma preguiçosa no primeiro acesso.BindType.instance
: Uma nova instância é criada toda vez que for solicitada.BindType.factory
: Semelhante aoinstance
, mas permite passar parâmetros na criação.
Exemplo
(BindType.singleton)
class DatabaseService {
void connect() => print('Connected');
}
(BindType.instance)
class Counter {
int count = 0;
}
Se nenhum tipo for especificado, o padrão é lazySingleton:
()
()
class AuthService {}
Injeção via Construtor
O container resolve e injeta automaticamente as dependências declaradas no construtor:
(BindType.singleton)
class UserService {
final DatabaseService database;
UserService(this.database);
void load() {
database.connect();
}
}
Desde que DatabaseService esteja registrado, UserService irá recebê-lo.