Skip to content

Repository files navigation

Mentioned in Awesome DartCircleCIpub package

This is a simple and flexible dependency injection container for dart.

If you are using Flutter consider the dependencies_flutter package.

Features

  • Immutability: The injector is created via a builder so it won't be modified after being created.
  • Modules: Separate dependencies into logical pars. Useful to separate by environments.
  • Singletons: Bind singletons and lazy singletons.
  • Factories: Bind factories.
  • Named dependencies: Give your dependencies custom names.
  • Extra arguments: Pass arguments to your factory methods.
  • Works with Flutter: Since it doesn't use reflexion it works with Flutter.

Usage

Set up

Optionally create a module.

classPlayerModuleimplementsModule {
@overridevoidconfigure(Binder binder) {
binder
..bindSingleton("playerkey", name:"api_key")
..bindFactory((injector, params) =>Player(params["playerId"]))
..bindLazySingleton((injector, params) =>Rest(injector));
}
}

Create a builder and use it to instantiate an injector.

final builder =Injector.builder()
..bind(instance:"abc123", isSingleton:true, name:"api_key")
..bindSingleton("abc123", name:"api_key_2")
..bindFactory((injector, params) =>User(params["userId"]))
..bindLazySingleton((injector, params) =>RestController(params["path"]))
..install(PlayerModule());
final injector = builder.build();

Usage

Get instances from the container.

finalPlayer player = injector.get(params: {"playerId":1});
finalRest rest = injector.get();
finalString apiKey = injector.get(name:"api_key");

Optionally you can manage injectors with the registry. Feel free to create your own or use the singleton.

InjectorRegistry.instance.register(injector);

Injectors can be fetched from the registry.

final injector =InjectorRegistry.instance.get();
final namedInjector =InjectorRegistry.instance.get(name:"named_injector");

About

Simple and flexible dependency injection container for dart.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages