• Stars
    star
    30
  • Rank 811,823 (Top 17 %)
  • Language
    Dart
  • License
    Other
  • Created over 5 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Simple and flexible dependency injection container for dart.

Mentioned in Awesome Dart CircleCI pub 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.

class PlayerModule implements Module {
  @override
  void configure(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.

final Player player = injector.get(params: {"playerId":1});
final Rest rest = injector.get();
final String 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");