From 35a9478446ea1ece89cfc7053b9a0694b3468f7f Mon Sep 17 00:00:00 2001 From: Sergey Penkovsky Date: Sat, 27 Mar 2021 19:48:03 +0300 Subject: [PATCH] upgraded code for nullsafety --- example/bin/main.dart | 2 +- example/pubspec.yaml | 5 +++-- lib/di_container.dart | 6 +++--- lib/resolvers/resolver.dart | 2 +- lib/resolvers/resolving_context.dart | 10 ++++++---- lib/resolvers/singelton_resolver.dart | 4 ++-- pubspec.yaml | 12 ++++++------ 7 files changed, 22 insertions(+), 19 deletions(-) diff --git a/example/bin/main.dart b/example/bin/main.dart index 3fe22eb..1affdec 100644 --- a/example/bin/main.dart +++ b/example/bin/main.dart @@ -59,7 +59,7 @@ abstract class ApiClient { class ApiClientMock implements ApiClient { @override Future sendRequest( - {@required String url, String token, Map requestBody}) async { + {@required String? url, String? token, Map? requestBody}) async { return 'hello world'; } } diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 05bf9f8..b142412 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -1,10 +1,10 @@ name: example version: 1.0.0 author: "Sergey Penkovsky " -homepage: +homepage: localhost environment: - sdk: ">=2.2.0 <3.0.0" + sdk: ">=2.12.0 <3.0.0" dependencies: @@ -12,3 +12,4 @@ dependencies: path: ../ dev_dependencies: + test: ^1.16.8 diff --git a/lib/di_container.dart b/lib/di_container.dart index 34238f8..25a8842 100644 --- a/lib/di_container.dart +++ b/lib/di_container.dart @@ -4,7 +4,7 @@ import 'package:dart_di/resolvers/resolving_context.dart'; * Контейнер - это объект, которой хранит все резолверы зависимостей. */ class DiContainer { - final DiContainer _parent; + final DiContainer? _parent; final _resolvers = {}; @@ -46,7 +46,7 @@ class DiContainer { /** * Возвращает разрешенную зависимость типа [T] или null, если она не может быть разрешена. */ - T tryResolve() { + T? tryResolve() { var resolver = _resolvers[T]; if (resolver != null) { return resolver.resolve(); @@ -70,6 +70,6 @@ class DiContainer { * @return - возвращает булево значение */ bool hasInTree() { - return has() || (_parent != null && _parent.hasInTree()); + return has() || (_parent != null && _parent!.hasInTree()); } } diff --git a/lib/resolvers/resolver.dart b/lib/resolvers/resolver.dart index 2aad3e7..e99fc65 100644 --- a/lib/resolvers/resolver.dart +++ b/lib/resolvers/resolver.dart @@ -7,5 +7,5 @@ abstract class Resolver { * Разрешает зависимость типа [T] * @return - возвращает объект типа [T] */ - T resolve(); + T? resolve(); } diff --git a/lib/resolvers/resolving_context.dart b/lib/resolvers/resolving_context.dart index 1a71917..65cb738 100644 --- a/lib/resolvers/resolving_context.dart +++ b/lib/resolvers/resolving_context.dart @@ -6,11 +6,13 @@ import 'package:dart_di/resolvers/value_resolver.dart'; class ResolvingContext extends Resolver { /// Корневой резолвер - Resolver get resolver => _resolver; + Resolver get resolver { + return _resolver as Resolver; + } DiContainer _container; - Resolver _resolver; + late Resolver _resolver; ResolvingContext(this._container); @@ -21,7 +23,7 @@ class ResolvingContext extends Resolver { @override T resolve() { _verify(); - return _resolver?.resolve(); + return _resolver.resolve(); } /** @@ -38,7 +40,7 @@ class ResolvingContext extends Resolver { * Создать резолвер значения */ ResolvingContext toValue(T value) { - Resolver resolver = ValueResolver(value); + Resolver resolver = ValueResolver(value as TImpl); return toResolver(resolver); } diff --git a/lib/resolvers/singelton_resolver.dart b/lib/resolvers/singelton_resolver.dart index 0a936ef..27906ba 100644 --- a/lib/resolvers/singelton_resolver.dart +++ b/lib/resolvers/singelton_resolver.dart @@ -2,12 +2,12 @@ import 'package:dart_di/resolvers/resolver.dart'; class SingletonResolver extends Resolver { Resolver _decoratedResolver; - T _value = null; + T? _value = null; SingletonResolver(this._decoratedResolver); @override - T resolve() { + T? resolve() { if (_value == null) { _value = _decoratedResolver.resolve(); } diff --git a/pubspec.yaml b/pubspec.yaml index e11ef36..ce7dd6a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,16 +1,16 @@ name: dart_di description: Experimental Dependency Injection library. -version: 0.0.1 +version: 0.0.2 author: Sergey Penkovsky -homepage: +homepage: locahost environment: - sdk: ">=2.7.0 <3.0.0" + sdk: ">=2.12.0 <3.0.0" dependencies: - meta: ^1.1.8 + meta: ^1.3.0 dev_dependencies: - test: ^1.14.3 + test: ^1.16.8 - mockito: ^4.1.1 + mockito: ^5.0.3