Dependency Injection tools for Dart.
The project is in beta testing, please write about all the errors found.
https://pub.dartlang.org/packages/miodi
Documentation coming soon, please wait.
Added example project. Pls check for future updates for more information. https://github.com/Miolin/miodi/tree/master/example
Create component:
class AppComponent extends MiodiComponent {
static String testScope = 'test';
final String param;
AppComponent(this.param);
@override
List<MiodiModule> get modules => [
module([
singleton(Database, () => DatabaseImpl()),
factory(User, () => User())
]),
module([
singleton(Logger, () => FileLogger(param)),
factory(LogSender, () => LogSender(get())),
scope(testScope, ScopeObject, () => ScopeObject())
])
];
}
class ScopeObject {}
abstract class Database {}
class DatabaseImpl implements Database {}
class User {}
abstract class Logger {}
class FileLogger implements Logger {
final String tag;
FileLogger(this.tag);
}
class LogSender {
final Logger logger;
LogSender(this.logger);
}
In the body of the component, use the get()
method to get dependencies (from the current or other modules).
You can use several components.
You can also use the component's constructor to represent dependencies in modules.
Usage example:
final appComponent = AppComponent('TAG');
void main() async {
Miodi.init([appComponent]);
Database database = inject();
//if you have a lot of big components override method 'String get componentNamespace' in your components
//this will speed up the search for dependencies
User user = inject('customComponentNamespace');
ScopeObject scopeObject = scopeInject(AppComponent.testScope);
//For cleaning of scopes it is NECESSARY!! use cleaning methods.
//otherwise they will work as singleton
clearScope(AppComponent.testScope);
//and use 'injectAsync' if object creation takes time or requires delays
Logger fileLogger = await injectAsync();
LogSender sender = inject();
sender.sendLog();
}
Please be careful when using scopeInject. Scopes in status progress.
If you have ideas on how to implement self-cleaning scopes , please contact me for prompt implementation.
example/README.md
A sample command-line application.
Created from templates made available by Stagehand under a BSD-style license.
Add this to your package's pubspec.yaml file:
dependencies:
miodi: ^0.2.4
You can install packages from the command line:
with pub:
$ pub get
with Flutter:
$ flutter packages get
Alternatively, your editor might support pub get
or flutter packages get
.
Check the docs for your editor to learn more.
Now in your Dart code, you can use:
import 'package:miodi/miodi.dart';
Version | Uploaded | Documentation | Archive |
---|---|---|---|
0.6.1 | Jan 30, 2019 |
|
|
0.5.2 | Dec 22, 2018 |
|
|
0.5.1 | Dec 22, 2018 |
|
|
0.4.0 | Dec 16, 2018 |
|
|
0.3.1 | Dec 9, 2018 |
|
|
0.3.0 | Nov 24, 2018 |
|
|
0.2.5 | Nov 5, 2018 |
|
|
0.2.4 | Nov 5, 2018 |
|
|
0.2.2 | Nov 3, 2018 |
|
|
0.2.1 | Nov 3, 2018 |
|
|
Popularity:
Describes how popular the package is relative to other packages.
[more]
|
18
|
Health:
Code health derived from static analysis.
[more]
|
99
|
Maintenance:
Reflects how tidy and up-to-date the package is.
[more]
|
80
|
Overall:
Weighted score of the above.
[more]
|
55
|
We analyzed this package on Feb 14, 2019, and provided a score, details, and suggestions below. Analysis was completed with status completed using:
Detected platforms: Flutter, web, other
No platform restriction found in primary library
package:miodi/miodi.dart
.
Document public APIs. (-1 points)
91 out of 91 API elements have no dartdoc comment.Providing good documentation for libraries, classes, functions, and other API elements improves code readability and helps developers find and use your API.
Format lib/core/component.dart
.
Run dartfmt
to format lib/core/component.dart
.
Format lib/core/configuration.dart
.
Run dartfmt
to format lib/core/configuration.dart
.
Format lib/core/consts.dart
.
Run dartfmt
to format lib/core/consts.dart
.
Fix additional 4 files with analysis or formatting issues.
Additional issues in the following files:
lib/core/module.dart
(Run dartfmt
to format lib/core/module.dart
.)lib/core/providers.dart
(Run dartfmt
to format lib/core/providers.dart
.)lib/error/errors.dart
(Run dartfmt
to format lib/error/errors.dart
.)lib/miodi.dart
(Run dartfmt
to format lib/miodi.dart
.)The package description is too short. (-20 points)
Add more detail to the description
field of pubspec.yaml
. Use 60 to 180 characters to describe the package, what it does, and its target use case.
Package | Constraint | Resolved | Available |
---|---|---|---|
Direct dependencies | |||
Dart SDK | >=2.0.0-dev.68.0 <3.0.0 | ||
Dev dependencies | |||
test | ^1.5.0 |