From c5827c09f2e53c9145cfb082ad5c8adb739e15c9 Mon Sep 17 00:00:00 2001 From: Tobe O Date: Wed, 17 Apr 2019 15:31:58 -0400 Subject: [PATCH] 1.0.4 --- angel_container/CHANGELOG.md | 3 +++ angel_container/lib/src/container.dart | 23 +++++++++++++++---- .../lib/src/mirrors/reflector.dart | 2 +- angel_container/test/mirrors_test.dart | 21 ++++++++++++++++- 4 files changed, 42 insertions(+), 7 deletions(-) diff --git a/angel_container/CHANGELOG.md b/angel_container/CHANGELOG.md index 6f70d11d..3de4653f 100644 --- a/angel_container/CHANGELOG.md +++ b/angel_container/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.0.4 +* Slight patch to prevent annoying segfault. + # 1.0.3 * Added `Future` support to `Reflector`. diff --git a/angel_container/lib/src/container.dart b/angel_container/lib/src/container.dart index 27d0530c..b6bbe2c0 100644 --- a/angel_container/lib/src/container.dart +++ b/angel_container/lib/src/container.dart @@ -59,14 +59,27 @@ class Container { /// /// It is similar to [make], but resolves an injection of either /// `Future` or `T`. - Future makeAsync() async { - if (has>()) { + Future makeAsync([Type type]) { + type ??= T; + Type futureType = null; //.Future.value(null).runtimeType; + + if (T == dynamic) { + try { + futureType = reflector.reflectFutureOf(type).reflectedType; + } on UnsupportedError { + // Ignore this. + } + } + + if (has(type)) { + return Future.value(make(type)); + } else if (has>()) { return make>(); - } else if (has()) { - return Future.value(make()); + } else if (futureType != null) { + return make(futureType); } else { throw new ReflectionException( - 'No injection for Future<$T> or $T was found.'); + 'No injection for Future<$type> or $type was found.'); } } diff --git a/angel_container/lib/src/mirrors/reflector.dart b/angel_container/lib/src/mirrors/reflector.dart index 63b9889e..ca9c006e 100644 --- a/angel_container/lib/src/mirrors/reflector.dart +++ b/angel_container/lib/src/mirrors/reflector.dart @@ -57,7 +57,7 @@ class MirrorsReflector extends Reflector { } var future = dart.reflectType(Future, [_mirror.reflectedType]); - return _ReflectedTypeMirror(future); + return _ReflectedClassMirror(future as dart.ClassMirror); } @override diff --git a/angel_container/test/mirrors_test.dart b/angel_container/test/mirrors_test.dart index 5122c918..e5f29b9c 100644 --- a/angel_container/test/mirrors_test.dart +++ b/angel_container/test/mirrors_test.dart @@ -1,7 +1,26 @@ +import 'dart:async'; +import 'package:angel_container/angel_container.dart'; import 'package:angel_container/mirrors.dart'; - +import 'package:test/test.dart'; import 'common.dart'; void main() { testReflector(const MirrorsReflector()); + + test('futureOf', () { + var r = MirrorsReflector(); + var fStr = r.reflectFutureOf(String); + expect(fStr.reflectedType.toString(), 'Future'); + // expect(fStr.reflectedType, Future.value(null).runtimeType); + }); + + test('concrete future make', () async { + var c = Container(MirrorsReflector()); + c.registerFactory>((_) async => 'hey'); + var fStr = c.reflector.reflectFutureOf(String); + var s1 = await c.make(fStr.reflectedType); + var s2 = await c.makeAsync(String); + print([s1, s2]); + expect(s1, s2); + }); }