miodi 0.7.1 miodi: ^0.7.1 copied to clipboard
Dependency Injection tools for Dart. This library aims to easily manage dependencies in your business logic components.
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))
];
}