From b6b2aa6c49da7d6566c376369c8b970766615066 Mon Sep 17 00:00:00 2001 From: Sergey Penkovsky Date: Sat, 27 Jun 2020 07:14:22 +0300 Subject: [PATCH] implemented resolvers --- lib/resolvers/factory_resolver.dart | 15 +++++++++++++++ lib/resolvers/resolver.dart | 11 +++++++++++ lib/resolvers/singelton_resolver.dart | 16 ++++++++++++++++ lib/resolvers/value_resolver.dart | 15 +++++++++++++++ 4 files changed, 57 insertions(+) create mode 100644 lib/resolvers/factory_resolver.dart create mode 100644 lib/resolvers/resolver.dart create mode 100644 lib/resolvers/singelton_resolver.dart create mode 100644 lib/resolvers/value_resolver.dart diff --git a/lib/resolvers/factory_resolver.dart b/lib/resolvers/factory_resolver.dart new file mode 100644 index 0000000..3f1f81f --- /dev/null +++ b/lib/resolvers/factory_resolver.dart @@ -0,0 +1,15 @@ +import 'package:dart_di/resolvers/resolver.dart'; + +/** + * Разрешает зависимость для фабричной функции + */ +class FactoryResolver extends Resolver { + Function _factory; + + FactoryResolver(this._factory); + + @override + T resolve() { + return _factory(); + } +} diff --git a/lib/resolvers/resolver.dart b/lib/resolvers/resolver.dart new file mode 100644 index 0000000..2aad3e7 --- /dev/null +++ b/lib/resolvers/resolver.dart @@ -0,0 +1,11 @@ +/** + * Resolver - это абстракция, которая определяет, + * как контейнер будет разрешать зависимость + */ +abstract class Resolver { + /** + * Разрешает зависимость типа [T] + * @return - возвращает объект типа [T] + */ + T resolve(); +} diff --git a/lib/resolvers/singelton_resolver.dart b/lib/resolvers/singelton_resolver.dart new file mode 100644 index 0000000..0a936ef --- /dev/null +++ b/lib/resolvers/singelton_resolver.dart @@ -0,0 +1,16 @@ +import 'package:dart_di/resolvers/resolver.dart'; + +class SingletonResolver extends Resolver { + Resolver _decoratedResolver; + T _value = null; + + SingletonResolver(this._decoratedResolver); + + @override + T resolve() { + if (_value == null) { + _value = _decoratedResolver.resolve(); + } + return _value; + } +} diff --git a/lib/resolvers/value_resolver.dart b/lib/resolvers/value_resolver.dart new file mode 100644 index 0000000..7460312 --- /dev/null +++ b/lib/resolvers/value_resolver.dart @@ -0,0 +1,15 @@ +import 'package:dart_di/resolvers/resolver.dart'; + +/** + * Разрешает зависимость для значения + */ +class ValueResolver extends Resolver { + T _value; + + ValueResolver(this._value); + + @override + T resolve() { + return _value; + } +}