dart-archive / di.dart

DEPRECATED
https://webdev.dartlang.org/angular/guide/dependency-injection
MIT License
66 stars 57 forks source link

DI can't handle classes that are created using Mixin application #100

Open zoechi opened 10 years ago

zoechi commented 10 years ago
abstract class BaseObject /*with GuiAttributes*/ {
  Map properties = {
    "top": 0.0,
    "left": 0.0
  };
}

class RectObject extends BaseObject {
  // width, height
}

class ImageObject extends RectObject {
  RectObject rect;

  ImageObject(this.rect);
}

class CircleObject extends BaseObject {
  // radius
}

abstract class GuiAttributes {
  bool showProperties = true;
}

class ExtendedRectObject = RectObject with GuiAttributes;
class ExtendedCircleObject = CircleObject with GuiAttributes;
class ExtendedImageObject = ImageObject with GuiAttributes;
bind(CircleObject, toImplementation: ExtendedCircleObject);
bind(RectObject, toImplementation: ExtendedRectObject);
bind(ImageObject, toImplementation: ExtendedImageObject);
injector.get(ImageObject)

leads to this stack trace

/home/zoechi/source/3rdparty/google/darteditor/dart-sdk/bin/dart --enable-checked-mode --debug:39396 main.dart
Breaking on exception: object of type NoProviderError
Unhandled exception:
Illegal argument(s): The 'rect' parameter must be typed (resolving ImageObject)
#0      DynamicInjector.newInstanceOf.resolveArgument (package:di/dynamic_injector.dart:47:9)
#1      List.List.generate (dart:core/list.dart:122)
#2      DynamicInjector.newInstanceOf (package:di/dynamic_injector.dart:68:20)
#3      TypeProvider.get (package:di/src/provider.dart:36:34)
#4      BaseInjector.getInstanceByKey (package:di/src/base_injector.dart:117:29)
#5      BaseInjector.get (package:di/src/base_injector.dart:158:23)
#6      main (file:///home/zoechi/source/my/dart/playground/bin/di/main.dart:67:45)
#7      _startIsolate.isolateStartHandler (dart:isolate-patch/isolate_patch.dart:216)
#8      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:124)
pavelgj commented 10 years ago

Upstream Dart issue: https://code.google.com/p/dart/issues/detail?id=18675