Architecture: How to break circular dependency between platform-preview (n...

Documentation for Sessions

🏗️ Architecture: How to break circular dependency between platform-preview (n...

Date: 2026-03-11
Time: 23:37:23 UTC
Session: gspace1-205.5
Agent: angular
Confidence: 95%
Status: ✅ Documented


📋 Decision Context

Question:

How to break circular dependency between platform-preview (new library) and vitto-studio when both need to share preview state?

Task: Not specified


🎯 Decision Made

Chosen:

PreviewContentService — a thin signal-holder service in platform-preview that PreviewService (vitto-studio) pushes data into, and PreviewFrameComponent (platform-preview) reads from. No imports from vitto-studio in platform-preview.

Options Considered:

  1. Direct injection of PreviewService from vitto-studio into platform-preview components — creates circular dep
  2. Injection token in a shared foundational lib — over-engineered for 3 signals
  3. PreviewContentService in platform-preview — thin bridge, no circular dep
  4. ViewChild parent-to-child communication — fragile, breaks with dock panel wrapping

💭 Reasoning

vitto-studio imports PlatformPreviewPanelComponent from platform-preview (for dock registration). platform-preview's PreviewFrameComponent needs preview HTML from PreviewService (in vitto-studio). Direct import creates circular: platform-preview→vitto-studio→platform-preview. The PreviewContentService pattern breaks this by providing a thin providedIn:'root' service in platform-preview that holds signals (staticHtml, devServerUrl, previewMode, previewError). PreviewService pushes data in. PreviewFrameComponent reads it. Zero circular imports. This is the same pattern used by Angular CDK's overlay service.


📁 Files Involved


🔗 Related


Auto-generated by MCP Smart Consolidation