Compare commits

...

2 Commits

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 {
@override
Future sendRequest(
{@required String url, String token, Map requestBody}) async {
{@required String? url, String? token, Map? requestBody}) async {
return 'hello world';
}
}

View File

@@ -1,10 +1,10 @@
name: example
version: 1.0.0
author: "Sergey Penkovsky <sergey.penkovsky@gmail.com>"
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

View File

@@ -4,7 +4,7 @@ import 'package:dart_di/resolvers/resolving_context.dart';
* Контейнер - это объект, которой хранит все резолверы зависимостей.
*/
class DiContainer {
final DiContainer _parent;
final DiContainer? _parent;
final _resolvers = <Type, ResolvingContext>{};
@@ -46,7 +46,7 @@ class DiContainer {
/**
* Возвращает разрешенную зависимость типа [T] или null, если она не может быть разрешена.
*/
T tryResolve<T>() {
T? tryResolve<T>() {
var resolver = _resolvers[T];
if (resolver != null) {
return resolver.resolve();
@@ -70,6 +70,6 @@ class DiContainer {
* @return - возвращает булево значение
*/
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]
* @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 {
/// Корневой резолвер
Resolver<T> get resolver => _resolver;
Resolver<T> get resolver {
return _resolver as Resolver<T>;
}
DiContainer _container;
Resolver _resolver;
late Resolver _resolver;
ResolvingContext(this._container);
@@ -21,7 +23,7 @@ class ResolvingContext<T> extends Resolver {
@override
T resolve() {
_verify();
return _resolver?.resolve();
return _resolver.resolve();
}
/**
@@ -38,7 +40,7 @@ class ResolvingContext<T> extends Resolver {
* Создать резолвер значения
*/
ResolvingContext<T> toValue<TImpl extends T>(T value) {
Resolver<TImpl> resolver = ValueResolver(value);
Resolver<TImpl> resolver = ValueResolver(value as TImpl);
return toResolver<TImpl>(resolver);
}

View File

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

View File

@@ -1,16 +1,16 @@
name: dart_di
description: Experimental Dependency Injection library.
version: 0.0.1
version: 0.0.2
author: Sergey Penkovsky <sergey.penkovsky@gmail.com>
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