在我的 Dart 应用程序中,我使用 MVP 模式和 Angular-dart 依赖注入(inject)库(Angular-di)。
在上面的示例中,我无法注入(inject) MyView 或 MyPresenter,因为这是循环依赖项。
class MyView {
MyPresenter presenter;
MyView(this.presenter);
}
class MyPresenter {
MyView view;
MyPresenter(this.view);
}
我通常使用 Guice 在 Java 中执行此操作的方式是注入(inject)一个工厂,例如:
class MyView {
MyPresenter presenter;
MyView(this.presenter);
}
class MyPresenter {
Factory<MyView> factoryView;
MyView view;
MyPresenter(this.factoryView) {
view = factoryView(this);
}
}
如何使用 Angular-di 实现此目的?是否可以注入(inject)工厂而无需编写工厂本身?
最佳答案
Angular 2 Dart
typedef MyView MyViewFactoryFn(MyPresenter p);
provide(MyView, useValue: (MyPresenter p) => new MyView(p));
MyPresenter(MyViewFactoryFn vf) {
view = vf(this);
}
或
typedef MyView MyViewFactoryFn(MyPresenter p);
MyView viewFactory(MyPresenter p) => new MyView(p)
const Provider(MyView, useFactory: viewFactory);
MyPresenter(MyViewFactoryFn vf) {
view = vf(this);
}
另请参阅
- https://webdev.dartlang.org/angular/api/angular2.core/Provider-class
- https://webdev.dartlang.org/angular/api/angular2.core/provide
Angular 1 Dart
你可以绑定(bind)一个闭包
typedef MyView MyViewFactoryFn(MyPresenter p);
bind(MyView, toValue: (MyPresenter p) => new MyView(p));
构造函数应该看起来像
MyPresenter(MyViewFactoryFn vf) {
view = vf(this);
}
还有一个 toFactory:
但我猜 DI 会调用工厂本身,但我猜带有闭包的 toValue:
可以工作(虽然没有尝试过)。
关于dependency-injection - Angular-Dart DI 库中的工厂注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26389693/