miodi 0.5.1 miodi: ^0.5.1 copied to clipboard
Dependency Injection tools for 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.injectAsync<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}');
}
class AppComponent extends MiodiComponent {
AppComponent() : super([controllerModule, appModule, loggerModule]);
}
final controllerModule =
module(providers: [factory(UserController, () => UserController())]);
final appModule = module(
providers: [
singleton(User, () => User('0', 'currentUser'),
name: currentUserProvider)
],
);
final loggerModule = LoggerModule();
class LoggerModule extends MiodiModule {
static const _filePath = 'assets/file';
LoggerModule()
: super(asyncProviders: [
asyncSingleton(Logger, () async {
var file = await loadFile(_filePath);
return FileLogger(file);
}, initOnStart: true)
]);
}
Future<String> loadFile(String filePath) async {
await Future.delayed(Duration(seconds: 1));
return filePath;
}