Skip to content

feat(di): feature modules resolve shared/core deps (7.1.0)#1060

Merged
jacobaraujo7 merged 2 commits into
masterfrom
feat/resolve-upward
Jun 24, 2026
Merged

feat(di): feature modules resolve shared/core deps (7.1.0)#1060
jacobaraujo7 merged 2 commits into
masterfrom
feat/resolve-upward

Conversation

@jacobaraujo7

Copy link
Copy Markdown
Contributor

Release 7.1.0 — feature modules can consume shared/core deps

Closes the resolution asymmetry surfaced while reviewing a real v7 app: a
feature module's module-level binds could not resolve dependencies from a
root-owned shared/core module (a path-less module(...)). Only page-scoped
provide binds could reach the core; feature binds ran in a leaf injector blind
to root-owned binds — forcing shared deps to be threaded in by hand.

What changed

  • _bind now composes the feature injector with auto_injector 2.2.0's
    opt-in upward resolution: root.addInjector(injector, resolveUpward: true).
  • A core consumer can now be a provide, the core itself, or a feature
    module-level bind — all alike. A feature's own bind still shadows a
    same-typed core bind (local wins; core is the fallback).
  • Constraint bumped to auto_injector: ">=2.2.0 <3.0.0".

Verified behavior (the gap, reproduced then fixed)

Bind site Resolves a core (root-owned) dep?
Page-scoped provide ✅ before & after
Feature module-level addSingleton (eager) ❌ before → ✅ 7.1.0
Feature module-level add (lazy factory) ❌ before → ✅ 7.1.0
Feature module-level addLazySingleton ❌ before → ✅ 7.1.0

auto_injector 2.2.0 (dependency)

Adds addInjector(child, resolveUpward: true) (opt-in, default false — no
behavior change for existing users), fixes a dispose-listener accumulation in
its layer graph, and adds an UpwardResolutionCycle guard against mutual upward
links.

Tests

  • New test/feature_resolves_core_test.dart regression test (feature
    module-level bind resolves a core ApiConfig).
  • Full suite green (62/62), flutter analyze clean.

🤖 Generated with Claude Code

Wire _bind to auto_injector 2.2.0's opt-in upward resolution
(addInjector(injector, resolveUpward: true)) so a feature module's
module-level binds resolve dependencies registered in a root-owned
shared/core module — closing the asymmetry where only page-scoped
`provide` could reach the core. Local binds still shadow same-typed
core binds (core is the fallback). Bumps auto_injector constraint to
>=2.2.0 and adds a regression test.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Document that a feature's binds resolve root-owned/core deps (7.1.0),
the local-shadows-core precedence, and the "await once in a Future<Module>
builder" idiom for Hive/SharedPreferences so main stays thin and features
take no parameters.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@jacobaraujo7 jacobaraujo7 merged commit 0f41054 into master Jun 24, 2026
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant