39 lines
2.7 KiB
Markdown
39 lines
2.7 KiB
Markdown
# Index — `EditModalSaveContextHolder` Missing DI Registration (BlazorBlocks / AuthBlocks)
|
|
|
|
**Status:** ✅ RESOLVED — shipped in `Cerebellum.BlazorBlocks.Web` 10.3.33 + `Cerebellum.AuthBlocks.Web` 10.3.36 (2026-06-20). ~~scoped, not yet started. Confirmed against `Cerebellum.BlazorBlocks.Web` 10.3.32 / `Cerebellum.AuthBlocks.Web` 10.3.33. Author: product-designer. Date: 2026-06-19.~~
|
|
|
|
> **Resolution (2026-06-20):** `AddBlazorBlocksWeb()` landed in `Cerebellum.BlazorBlocks.Web` 10.3.33 and `ConfigureAuthServices` calls it in `Cerebellum.AuthBlocks.Web` 10.3.36; DeepDrftManager picked up 10.3.36 and removed its local `EditModalSaveContextHolder` stopgap.
|
|
> This brief is retained as historical record — no further action required.
|
|
|
|
## The defect
|
|
|
|
BlazorBlocks' `ModelView` / `EditModelModal` components have a `required [Inject]` dependency on
|
|
`Web.Maintenance.Entities.EditModalSaveContextHolder` (a per-circuit save bridge), but the BlazorBlocks
|
|
`Web` package ships no registration extension for it and AuthBlocks' `ConfigureAuthServices` never registers
|
|
it either. Any consumer of a `ModelView`-based page (e.g. AuthBlocks' `Users.razor` /
|
|
`Registrations.razor`) crashes the Blazor circuit on navigation with an unregistered-service
|
|
`InvalidOperationException`. Two independent downstream products have each hand-registered the internal
|
|
service as a stopgap — the tell that this is a leaked library registration.
|
|
|
|
## The two-team layered fix (ordered — do not reorder)
|
|
|
|
1. **BlazorBlocks ships first.** Add a Web-side `AddBlazorBlocksWeb()` extension that registers the holder
|
|
via `TryAddScoped` (scoped is required). Bump `Cerebellum.BlazorBlocks.Web` from 10.3.32; report the new
|
|
version.
|
|
2. **AuthBlocks ships second.** Bump its `Cerebellum.BlazorBlocks.Web` reference to that new version, call
|
|
`AddBlazorBlocksWeb()` from `ConfigureAuthServices`, bump `Cerebellum.AuthBlocks.Web` from 10.3.33.
|
|
|
|
AuthBlocks is blocked until BlazorBlocks' new version is published. Registration lives with its owner
|
|
(BlazorBlocks); AuthBlocks stays self-contained by composing it. MudBlazor (`AddMudServices`) stays a
|
|
caller-owned prerequisite throughout.
|
|
|
|
## The detail lives in the two team briefs
|
|
|
|
Each is fully self-contained for an orchestrator working in only that one repo:
|
|
|
|
- **BlazorBlocks team** → [`team-brief-blazorblocks-modelview-di.md`](./team-brief-blazorblocks-modelview-di.md)
|
|
(root cause, `[Inject]` audit, lifetime rationale, the new extension, version bump, acceptance criteria).
|
|
- **AuthBlocks team** → [`team-brief-authblocks-modelview-di.md`](./team-brief-authblocks-modelview-di.md)
|
|
(the blocking BlazorBlocks prerequisite, the `ConfigureAuthServices` call, version bump, acceptance
|
|
criteria).
|