在 dart 中定义 class 之后在库级别执行代码

execute code at library level after class definition in dart

所以我正在尝试将一个小的实用程序代码从 JS 迁移到 Dart,但我正在努力寻找如何执行以下操作:

注册表用于将 Class 映射到返回 DifferentClass 新实例的函数。

typedef DifferentClass InstanceGenerator();
Map<Type, InstanceGenerator> _registry;
_registry[ClassDefinition] = () => new DifferentClass();

// at runtime
var a = new ClassDefinition();
var b = _registry[a.runtimeType](); // should resolve to instance of DifferentClass.

这一切都工作得很好,但我目前面临的问题是我需要能够添加到任何 class 范围之外的注册表,并且基本上是在 class 的级别图书馆。在 JS 中,这是作为顶级调用实现的,但在 Dart 中,这似乎是不允许的(DartEditor 说不)。

我如何在 Dart 中执行此模式:基本上我需要为每个 class 注册一个解析为另一个 class 的实例的函数,并在运行时基于实例的运行时类型第一个 class 创建为其注册的那个。

目前看起来是这样的:

library whatever;
class ABC {}
Registry.instance.register(ABC, () => new DEF()); // This does not work.

您不能将要在库顶层执行的代码。 您只能在库顶层创建函数、类、枚举和 typedef。 在 Dart 中,所有内容都需要从 main() 或从 main()

调用的任何内容显式调用

你可以创建一个像

这样的函数
library whatever;
class ABC {}
register() => Registry.instance.register(ABC, () => new DEF()); 

然后例如从主

import 'whatever.dart' as we;

main() {
  we.register();
}

或者,您可以使用 initialize 包以声明方式执行此操作。