container@1.0.3 (future support)
This commit is contained in:
parent
41df6967c4
commit
d51c317892
7 changed files with 31 additions and 6 deletions
|
@ -1,3 +1,6 @@
|
|||
# 1.0.3
|
||||
* Added `Future` support to `Reflector`.
|
||||
|
||||
# 1.0.2
|
||||
* Added `makeAsync<T>`.
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ final Map<Symbol, String> _symbolNames = <Symbol, String>{};
|
|||
/// instead returning empty objects on every invocation.
|
||||
///
|
||||
/// Use this in contexts where you know you won't need any reflective capabilities.
|
||||
class EmptyReflector implements Reflector {
|
||||
class EmptyReflector extends Reflector {
|
||||
/// A [RegExp] that can be used to extract the name of a symbol without reflection.
|
||||
static final RegExp symbolRegex = new RegExp(r'Symbol\("([^"]+)"\)');
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
import 'dart:async';
|
||||
import 'dart:mirrors' as dart;
|
||||
|
||||
import 'package:angel_container/angel_container.dart';
|
||||
import 'package:angel_container/src/reflector.dart';
|
||||
|
||||
/// A [Reflector] implementation that forwards to `dart:mirrors`.
|
||||
///
|
||||
/// Useful on the server, where reflection is supported.
|
||||
class MirrorsReflector implements Reflector {
|
||||
class MirrorsReflector extends Reflector {
|
||||
const MirrorsReflector();
|
||||
|
||||
@override
|
||||
|
@ -44,6 +44,22 @@ class MirrorsReflector implements Reflector {
|
|||
}
|
||||
}
|
||||
|
||||
@override
|
||||
ReflectedType reflectFutureOf(Type type) {
|
||||
var inner = reflectType(type);
|
||||
dart.TypeMirror _mirror;
|
||||
if (inner is _ReflectedClassMirror) {
|
||||
_mirror = inner.mirror;
|
||||
} else if (inner is _ReflectedTypeMirror) {
|
||||
_mirror = inner.mirror;
|
||||
} else {
|
||||
throw ArgumentError('$type is not a class or type.');
|
||||
}
|
||||
|
||||
var future = dart.reflectType(Future, [_mirror.reflectedType]);
|
||||
return _ReflectedTypeMirror(future);
|
||||
}
|
||||
|
||||
@override
|
||||
ReflectedInstance reflectInstance(Object object) {
|
||||
return new _ReflectedInstanceMirror(dart.reflect(object));
|
||||
|
|
|
@ -2,6 +2,8 @@ import 'package:collection/collection.dart';
|
|||
import 'package:quiver/core.dart';
|
||||
|
||||
abstract class Reflector {
|
||||
const Reflector();
|
||||
|
||||
String getName(Symbol symbol);
|
||||
|
||||
ReflectedClass reflectClass(Type clazz);
|
||||
|
@ -11,6 +13,10 @@ abstract class Reflector {
|
|||
ReflectedType reflectType(Type type);
|
||||
|
||||
ReflectedInstance reflectInstance(Object object);
|
||||
|
||||
ReflectedType reflectFutureOf(Type type) {
|
||||
throw new UnsupportedError('`reflectFutureOf` requires `dart:mirrors`.');
|
||||
}
|
||||
}
|
||||
|
||||
abstract class ReflectedInstance {
|
||||
|
|
|
@ -3,7 +3,7 @@ import 'package:angel_container/angel_container.dart';
|
|||
/// A [Reflector] implementation that performs simple [Map] lookups.
|
||||
///
|
||||
/// `package:angel_container_generator` uses this to create reflectors from analysis metadata.
|
||||
class StaticReflector implements Reflector {
|
||||
class StaticReflector extends Reflector {
|
||||
final Map<Symbol, String> names;
|
||||
final Map<Type, ReflectedType> types;
|
||||
final Map<Function, ReflectedFunction> functions;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
name: angel_container
|
||||
version: 1.0.2
|
||||
version: 1.0.3
|
||||
author: Tobe O <thosakwe@gmail.com>
|
||||
description: "A better IoC container and dependency injector for Angel, ultimately allowing Angel to be used without dart:mirrors."
|
||||
homepage: https://github.com/angel-dart/container.git
|
||||
|
|
|
@ -20,7 +20,7 @@ class ContainedReflectable extends Reflectable {
|
|||
}
|
||||
|
||||
/// A [Reflector] instance that uses a [Reflectable] to reflect upon data.
|
||||
class GeneratedReflector implements Reflector {
|
||||
class GeneratedReflector extends Reflector {
|
||||
final Reflectable reflectable;
|
||||
|
||||
const GeneratedReflector([this.reflectable = contained]);
|
||||
|
|
Loading…
Reference in a new issue