miodi 0.7.1 copy "miodi: ^0.7.1" to clipboard
miodi: ^0.7.1 copied to clipboard

discontinued

Dependency Injection tools for Dart. This library aims to easily manage dependencies in your business logic components.

example/lib/main.dart

import 'package:example/components.dart';
import 'package:example/consts.dart';
import 'package:miodi/miodi.dart';

main(List<String> arguments) async {
  Miodi.init([AppComponent()]);
  var logger = await Miodi.inject<Logger>();
//  var logger = await injectAsync<Logger>();

  UserController controller = Miodi.inject();
//  UserController controller = inject();

  logger.log(controller.currentUser.id);
  logger.log(controller.currentUser.name);

  controller.currentUser.name = 'new_name';

  logger.log(controller.currentUser.id);
  logger.log(controller.currentUser.name);

  var currentUser = inject<User>(currentUserProvider);

  logger.log('User:: ${currentUser.id}');
  logger.log('User:: ${currentUser.name}');

  final testDependency = inject<TestDependency>();

  logger.log('TestDependency  ${testDependency.controller.currentUser.name}');
}

class AppComponent extends MiodiComponent {
  @override
  List<MiodiModule> get modules => [
        module(
          providers: [
            factory(
              UserController,
              () => UserController(get(name: currentUserProvider)),
            ),
          ],
        ),
        appModule,
        loggerModule,
        ExampleDependencyModule(get)
      ];
}

final appModule = module(
  providers: [
    singleton(User, () => User('0', 'currentUser'), name: currentUserProvider)
  ],
);

final loggerModule = LoggerModule();

typedef T DependencyProvider<T>();

class ExampleDependencyModule extends MiodiModule {
  final DependencyProvider<UserController> controllerProvider;

  ExampleDependencyModule(this.controllerProvider);

  @override
  List<Provider> get providers =>
      [factory(TestDependency, () => TestDependency(controllerProvider()))];
}

class TestDependency {
  final UserController controller;

  TestDependency(this.controller);
}

class LoggerModule extends MiodiModule {
  static const _filePath = 'assets/file';

  @override
  List<Provider> get providers => [
    singleton(Logger, ()=> FileLogger(_filePath))
  ];
}
1
likes
30
pub points
0%
popularity

Publisher

unverified uploader

Dependency Injection tools for Dart. This library aims to easily manage dependencies in your business logic components.

Repository (GitHub)
View/report issues

License

MIT (LICENSE)

Dependencies

meta

More

Packages that depend on miodi