Compare commits

...

2 Commits
0.1.2 ... 0.0.2

Author SHA1 Message Date
Sergey Penkovsky
1aa0ae045e Добавить .gitlab-ci.yml 2021-04-14 17:19:35 +03:00
Sergey Penkovsky
12d877333a upgraded code for nullsafety 2021-03-27 19:48:03 +03:00
8 changed files with 45 additions and 19 deletions

23
.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,23 @@
# This file is a template, and might need editing before it works on your project.
# https://hub.docker.com/r/google/dart
image: google/dart:latest
variables:
# Use to learn more:
# pub run test --help
PUB_VARS: "--platform vm --timeout 30s --concurrency=6 --test-randomize-ordering-seed=random --reporter=expanded"
# Cache downloaded dependencies and plugins between builds.
# To keep cache across branches add 'key: "$CI_JOB_NAME"'
cache:
paths:
- .pub-cache/global_packages
before_script:
- export PATH="$PATH":"~/.pub-cache/bin"
- pub get --no-precompile
test:
stage: test
script:
- pub run test $PUB_VARS

View File

@@ -59,7 +59,7 @@ abstract class ApiClient {
class ApiClientMock implements ApiClient { class ApiClientMock implements ApiClient {
@override @override
Future sendRequest( Future sendRequest(
{@required String url, String token, Map requestBody}) async { {@required String? url, String? token, Map? requestBody}) async {
return 'hello world'; return 'hello world';
} }
} }

View File

@@ -1,10 +1,10 @@
name: example name: example
version: 1.0.0 version: 1.0.0
author: "Sergey Penkovsky <sergey.penkovsky@gmail.com>" author: "Sergey Penkovsky <sergey.penkovsky@gmail.com>"
homepage: homepage: localhost
environment: environment:
sdk: ">=2.2.0 <3.0.0" sdk: ">=2.12.0 <3.0.0"
dependencies: dependencies:
@@ -12,3 +12,4 @@ dependencies:
path: ../ path: ../
dev_dependencies: dev_dependencies:
test: ^1.16.8

View File

@@ -4,7 +4,7 @@ import 'package:dart_di/resolvers/resolving_context.dart';
* Контейнер - это объект, которой хранит все резолверы зависимостей. * Контейнер - это объект, которой хранит все резолверы зависимостей.
*/ */
class DiContainer { class DiContainer {
final DiContainer _parent; final DiContainer? _parent;
final _resolvers = <Type, ResolvingContext>{}; final _resolvers = <Type, ResolvingContext>{};
@@ -46,7 +46,7 @@ class DiContainer {
/** /**
* Возвращает разрешенную зависимость типа [T] или null, если она не может быть разрешена. * Возвращает разрешенную зависимость типа [T] или null, если она не может быть разрешена.
*/ */
T tryResolve<T>() { T? tryResolve<T>() {
var resolver = _resolvers[T]; var resolver = _resolvers[T];
if (resolver != null) { if (resolver != null) {
return resolver.resolve(); return resolver.resolve();
@@ -70,6 +70,6 @@ class DiContainer {
* @return - возвращает булево значение * @return - возвращает булево значение
*/ */
bool hasInTree<T>() { bool hasInTree<T>() {
return has<T>() || (_parent != null && _parent.hasInTree<T>()); return has<T>() || (_parent != null && _parent!.hasInTree<T>());
} }
} }

View File

@@ -7,5 +7,5 @@ abstract class Resolver<T> {
* Разрешает зависимость типа [T] * Разрешает зависимость типа [T]
* @return - возвращает объект типа [T] * @return - возвращает объект типа [T]
*/ */
T resolve(); T? resolve();
} }

View File

@@ -6,11 +6,13 @@ import 'package:dart_di/resolvers/value_resolver.dart';
class ResolvingContext<T> extends Resolver { class ResolvingContext<T> extends Resolver {
/// Корневой резолвер /// Корневой резолвер
Resolver<T> get resolver => _resolver; Resolver<T> get resolver {
return _resolver as Resolver<T>;
}
DiContainer _container; DiContainer _container;
Resolver _resolver; late Resolver _resolver;
ResolvingContext(this._container); ResolvingContext(this._container);
@@ -21,7 +23,7 @@ class ResolvingContext<T> extends Resolver {
@override @override
T resolve() { T resolve() {
_verify(); _verify();
return _resolver?.resolve(); return _resolver.resolve();
} }
/** /**
@@ -38,7 +40,7 @@ class ResolvingContext<T> extends Resolver {
* Создать резолвер значения * Создать резолвер значения
*/ */
ResolvingContext<T> toValue<TImpl extends T>(T value) { ResolvingContext<T> toValue<TImpl extends T>(T value) {
Resolver<TImpl> resolver = ValueResolver(value); Resolver<TImpl> resolver = ValueResolver(value as TImpl);
return toResolver<TImpl>(resolver); return toResolver<TImpl>(resolver);
} }

View File

@@ -2,12 +2,12 @@ import 'package:dart_di/resolvers/resolver.dart';
class SingletonResolver<T> extends Resolver<T> { class SingletonResolver<T> extends Resolver<T> {
Resolver<T> _decoratedResolver; Resolver<T> _decoratedResolver;
T _value = null; T? _value = null;
SingletonResolver(this._decoratedResolver); SingletonResolver(this._decoratedResolver);
@override @override
T resolve() { T? resolve() {
if (_value == null) { if (_value == null) {
_value = _decoratedResolver.resolve(); _value = _decoratedResolver.resolve();
} }

View File

@@ -1,16 +1,16 @@
name: dart_di name: dart_di
description: Experimental Dependency Injection library. description: Experimental Dependency Injection library.
version: 0.0.1 version: 0.0.2
author: Sergey Penkovsky <sergey.penkovsky@gmail.com> author: Sergey Penkovsky <sergey.penkovsky@gmail.com>
homepage: homepage: locahost
environment: environment:
sdk: ">=2.7.0 <3.0.0" sdk: ">=2.12.0 <3.0.0"
dependencies: dependencies:
meta: ^1.1.8 meta: ^1.3.0
dev_dependencies: dev_dependencies:
test: ^1.14.3 test: ^1.16.8
mockito: ^4.1.1 mockito: ^5.0.3