4.2 KiB
For this step, you’re not writing any real logic yet – you’re just making sure the projects depend on each other in the right direction so future work doesn’t turn into spaghetti.
Think of it as locking in the dependency graph.
1. Pin the desired dependency graph
First, make explicit what is allowed to depend on what.
Target graph:
-
StellaOps.Router.Common- Lowest layer.
- No project references to any other StellaOps projects.
-
StellaOps.Router.Config-
References:
StellaOps.Router.Common.
-
-
StellaOps.Microservice-
References:
StellaOps.Router.Common.
-
-
StellaOps.Microservice.SourceGen- For now: no references, or only to Common if needed for types in generated code.
- Later: will be consumed as an analyzer by
StellaOps.Microservice, not via normal project reference.
-
StellaOps.Gateway.WebService-
References:
StellaOps.Router.CommonStellaOps.Router.Config.
-
Test projects:
StellaOps.Router.Common.Tests→StellaOps.Router.CommonStellaOps.Gateway.WebService.Tests→StellaOps.Gateway.WebServiceStellaOps.Microservice.Tests→StellaOps.Microservice
Explicitly: there should be no circular references, and nothing should reference the Gateway from libraries.
2. Add the project references
From repo root, for each needed edge:
# Gateway → Common + Config
dotnet add src/StellaOps.Gateway.WebService/StellaOps.Gateway.WebService.csproj reference \
src/__Libraries/StellaOps.Router.Common/StellaOps.Router.Common.csproj \
src/__Libraries/StellaOps.Router.Config/StellaOps.Router.Config.csproj
# Microservice → Common
dotnet add src/__Libraries/StellaOps.Microservice/StellaOps.Microservice.csproj reference \
src/__Libraries/StellaOps.Router.Common/StellaOps.Router.Common.csproj
# Config → Common
dotnet add src/__Libraries/StellaOps.Router.Config/StellaOps.Router.Config.csproj reference \
src/__Libraries/StellaOps.Router.Common/StellaOps.Router.Common.csproj
# Tests → main projects
dotnet add tests/StellaOps.Router.Common.Tests/StellaOps.Router.Common.Tests.csproj reference \
src/__Libraries/StellaOps.Router.Common/StellaOps.Router.Common.csproj
dotnet add tests/StellaOps.Gateway.WebService.Tests/StellaOps.Gateway.WebService.Tests.csproj reference \
src/StellaOps.Gateway.WebService/StellaOps.Gateway.WebService.csproj
dotnet add tests/StellaOps.Microservice.Tests/StellaOps.Microservice.Tests.csproj reference \
src/__Libraries/StellaOps.Microservice/StellaOps.Microservice.csproj
Do not add any references:
- From
Common→ anything. - From
Config→ Gateway or Microservice. - From
Microservice→ Gateway. - From tests → libraries other than their primary target (unless you explicitly want shared test utils later).
3. Verify the .csproj contents
Have one agent open each .csproj and confirm:
-
StellaOps.Router.Common.csproj- No
<ProjectReference>elements.
- No
-
StellaOps.Router.Config.csproj- Exactly one
<ProjectReference>: Common.
- Exactly one
-
StellaOps.Microservice.csproj- Exactly one
<ProjectReference>: Common.
- Exactly one
-
StellaOps.Microservice.SourceGen.csproj- No project references for now (we’ll convert it to a proper analyzer / source-generator package later).
-
StellaOps.Gateway.WebService.csproj- Exactly two
<ProjectReference>s: Common + Config. - No reference to Microservice.
- Exactly two
-
Test projects:
- Each test project references only its corresponding main project (no cross-test coupling).
If anything else is present (e.g. leftover references from templates), remove them.
4. Run a full build & test as a sanity check
From repo root:
dotnet restore
dotnet build StellaOps.Router.sln -c Debug
dotnet test StellaOps.Router.sln -c Debug
Acceptance criteria for this step:
-
Solution builds without reference errors.
-
All test projects compile and run (even if they only have dummy tests).
-
Intellisense / navigation in IDE shows:
- Gateway can see Common & Config types.
- Microservice can see Common types.
- Config can see Common types.
- No library can see Gateway unless through tests.
Once this is stable, your devs can safely move on to implementing the Common model and know they won’t have to rewrite references later.