implemented expiremental di with new api

This commit is contained in:
Sergey Penkovsky
2021-04-21 08:05:38 +03:00
parent 2d6fdbe04c
commit 6a2d86c83c
6 changed files with 247 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
enum Mode { SIMPLE, INSTANCE, PROVIDER_INSTANCE }
class Binding<T> {
late Mode _mode;
late Type _key;
late String _name;
late T _instance;
late T Function() _provider;
late bool _isSingeltone = false;
late bool _isNamed = false;
Binding() {
_mode = Mode.SIMPLE;
_key = T;
}
Mode get mode => _mode;
Type get key => _key;
String get name => _name;
bool get isSingeltone => _isSingeltone;
bool get isNamed => _isNamed;
Binding<T> withName(String name) {
_name = name;
_isNamed = true;
return this;
}
Binding<T> toInstance(T value) {
_mode = Mode.INSTANCE;
_instance = value;
_isSingeltone = true;
return this;
}
Binding<T> toProvide(T Function() value) {
_mode = Mode.PROVIDER_INSTANCE;
_provider = value;
return this;
}
Binding<T> singeltone() {
if (_mode == Mode.PROVIDER_INSTANCE) {
_instance = _provider.call();
}
_isSingeltone = true;
return this;
}
T? get instance => _instance;
T? get provider => _provider.call();
}