Index: third_party/pkg/di/lib/src/provider.dart |
diff --git a/third_party/pkg/di/lib/src/provider.dart b/third_party/pkg/di/lib/src/provider.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e654457bd045d6bf8eb59b8fad593f417e85716d |
--- /dev/null |
+++ b/third_party/pkg/di/lib/src/provider.dart |
@@ -0,0 +1,50 @@ |
+library di.provider; |
+ |
+import 'injector_delagate.dart'; |
+import 'base_injector.dart'; |
+import 'package:di/di.dart'; |
+ |
+abstract class ObjectFactory { |
+ Object getInstanceByKey(Key key, BaseInjector requester, ResolutionContext resolving); |
+} |
+ |
+abstract class Provider { |
+ final Visibility visibility; |
+ final Type type; |
+ |
+ Provider(this.type, this.visibility); |
+ |
+ dynamic get(BaseInjector injector, BaseInjector requestor, |
+ ObjectFactory objFactory, resolving); |
+} |
+ |
+class ValueProvider extends Provider { |
+ dynamic value; |
+ |
+ ValueProvider(type, this.value, [Visibility visibility]) |
+ : super(type, visibility); |
+ |
+ dynamic get(BaseInjector injector, BaseInjector requestor, |
+ ObjectFactory objFactory, resolving) => value; |
+} |
+ |
+class TypeProvider extends Provider { |
+ TypeProvider(type, [Visibility visibility]) : super(type, visibility); |
+ |
+ dynamic get(BaseInjector injector, BaseInjector requestor, |
+ ObjectFactory objFactory, resolving) { |
+ return injector.newInstanceOf( |
+ type, objFactory, requestor, resolving); |
+ } |
+} |
+ |
+class FactoryProvider extends Provider { |
+ final Function factoryFn; |
+ |
+ FactoryProvider(type, this.factoryFn, [Visibility visibility]) |
+ : super(type, visibility); |
+ |
+ dynamic get(BaseInjector injector, BaseInjector requestor, |
+ ObjectFactory objFactory, resolving) => |
+ factoryFn(new InjectorDelagate(injector, resolving)); |
+} |