register method

  1. @override
void register(
  1. Container container
)
override

Register services with the container.

This method is called when the provider is registered with the container. Use this method to register bindings, instances, and aliases.

Implementation

@override
void register(Container container) {
  _rootContainer = container;

  final registry = container.get<ConfigRegistry>();
  final defaultsImpl = ConfigImpl(registry.combinedDefaults());
  if (_configOptions.defaults.isNotEmpty) {
    defaultsImpl.merge(_configOptions.defaults);
  }

  final effectiveOptions = _configOptions.copyWith(
    defaults: deepCopyMap(defaultsImpl.all()),
  );

  final snapshot = _loader.load(
    effectiveOptions,
    overrides: _configItems ?? const {},
  );
  _snapshot = snapshot;

  final initialEngineConfig = _resolveEngineConfig(
    snapshot.config,
    _config ?? EngineConfig(),
  );
  container.instance<EngineConfig>(initialEngineConfig);
  container.instance<Config>(snapshot.config);
  container.instance<ViewEngineManager>(ViewEngineManager());
  container.instance<MiddlewareRegistry>(MiddlewareRegistry());
  _registryListener = (entry) {
    final currentSnapshot = _snapshot;
    if (currentSnapshot == null) {
      return;
    }
    final rendered = _loader.renderDefaults(
      entry.defaults,
      currentSnapshot.templateContext,
    );
    if (rendered.isEmpty) {
      return;
    }
    currentSnapshot.config.mergeDefaults(rendered);
  };
  registry.addListener(_registryListener!);
}