miodi 0.2.5 miodi: ^0.2.5 copied to clipboard
Dependency Injection tools for Dart.
import 'dart:async';
import 'package:miodi/miodi.dart';
main(List<String> arguments) async {
Miodi.init([
AppComponent(),
// .. other components
]);
Database database;
Future<Database> databaseFuture = injectAsync();
Logger logger = inject();
logger.info('Load database...');
database = await databaseFuture;
UserInfo userInfo = scopeInject(AppComponent.userScope);
//
//
//
//
clearScope(AppComponent.userScope);
}
class AppComponent extends MiodiComponent {
static const String userScope = 'user';
static const String namespace = 'app_component';
@override
List<MiodiModule> get modules => [
module([
factory(Logger, () => ConsoleLogger()),
singleton(Database, () => DatabaseImpl(get())),
scope(userScope, UserInfo, () => UserInfo())
]),
// module([
// ...other dependency
// ])
];
@override
String get componentNamespace => namespace;
}
class ConsoleLogger implements Logger {
@override
void debug(String message) {
print('Debug:: $message');
}
@override
void error(String message) {
print('Error:: $message');
}
@override
void info(String message) {
print('Info:: $message');
}
}
class ScopeObject {}
abstract class Database {}
class DatabaseImpl implements Database {
final Logger logger;
DatabaseImpl(this.logger) {
logger.info('Database loaded');
}
}
class UserInfo {}
abstract class Logger {
void debug(String message);
void info(String message);
void error(String message);
}