dependency-injection - Angular-Dart DI 库中的工厂注入(inject)

标签 dependency-injection dart angular-dart

在我的 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);
}

另请参阅

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/

相关文章:

java - 依赖注入(inject),模拟外部库中的东西?

java - 这是依赖注入(inject)的正确用法吗

dart - 多次打开页面错误

dart - AngularDart 可以直接路由到组件吗?

dart - 如何在 AngularDart 中将带有新行的字符串显示为带有 <br/> 的字符串?

go - 在 golang 中模拟内部函数

scala - 如何将()注入(inject)到具有构造函数参数的类中?

Facebook for Flutter App 在 IOS 上崩溃,在 Android 上运行良好

dart - Flutter:检测 API 中的变化