Skip to content
kc@kumarChandrachooda.com:~$ cd /blog/category/net && read --section="01 net" 0%
Topic

.NET

348 articles filed under this topic.

Series in .NET
Series · 15 parts

An Attendance Platform in ASP.NET Core

Badge gates, WFH timers and shift allowances - the shape of a seven-project intranet attendance platform, the onion it almost is, and the roadmap for fourteen more parts.

Series · 4 parts

An Attendance Platform — The Frontend Chapters

A 6.23 MB JavaScript bundle loaded on every page, a manifest that minifies CSS but concatenates JS, and two copies of jQuery - the first of four frontend chapters the attendance series skipped.

Series · 9 parts

Archive-on-Delete with ArchiveKit

Hard deletes destroy the audit trail; soft deletes clutter live tables forever. Introducing ArchiveKit, a .NET library that intercepts deletions and stores immutable archive snapshots with TTL policies and cascade archiving.

Series · 8 parts

Contract Testing with Pactify

Unit tests mock what you assume, end-to-end tests tell you too late - consumer-driven contract testing closes the gap, and a small open-source .NET library called Pactify is the clearest way I know to learn how it works. Part 1 of a series.

Series · 8 parts

Convey — The Missing Chapters

The 22-part Convey series read the packages; it never once walked the sample system that ships with them. Opening the missing chapters with the trip an order takes through Orders, Pricing and Deliveries — and what the samples quietly teach that no package README does.

Series · 10 parts

Entity Versioning with VersionKit

Rename a property, change a type, ship the release - and every payload you stored last year stops deserialising. Introducing VersionKit, a .NET library that declares schema history as attributes and migrates old data on read.

Series · 17 parts

FastEndpoints in Depth

Controllers grow sideways and Minimal APIs grow into soup. FastEndpoints bets on a third shape - one class per endpoint - and this series reads its source to see how the bet is implemented. Part 1 of FastEndpoints in Depth.

Series · 12 parts

FastEndpoints — The Missing Chapters

Seventeen parts of reading FastEndpoints and the series never once mentioned mappers - the entity-translation layer half the endpoint base classes exist to serve. The Missing Chapters opens with the biggest gap: where mappers live, how they are found, and why they are secretly singletons. Part 1 of FastEndpoints — The Missing Chapters.

Series · 15 parts

Five Modules, One Database Each

Inflow is a modular monolith whose modules agree on their boundaries and disagree about everything inside them - a four-project onion next to a single feature-sliced assembly. Part 1 of a series reading the money-moving half of the estate.

Series · 18 parts

GroupFlights — Tactics in Three Dialects

A teaching repo that implements one airline-charter domain three ways on purpose - CRUD, CRUD-plus-rich, and Clean Architecture - and persists it three ways to match. Part 1 of a source-reading series.

Series · 22 parts

Microservices with Convey

Every team's fifth microservice ships with the same four hundred lines of bootstrap code as the first four. Opening a deep-dive series on Convey, the open-source .NET toolkit that turned that boilerplate into thirty composable packages.

Series · 10 parts

Multi-Tenancy in .NET with EF Core

Database-per-tenant, schema-per-tenant, or packed into a shared database? Kicking off a series on building a multi-tenant platform where one EF Core codebase supports all three isolation strategies behind a single control plane.

Series · 15 parts

Nine Services and a Message Bus

DShop is one e-commerce shop stamped out as nine microservices over RabbitMQ - this series reads the real source to see how the topology holds together and where it drifts. Part 1 of Nine Services and a Message Bus.

Series · 13 parts

No Coding Whatsoever

A 2018 API gateway promises that routing, auth, validation and messaging need no code at all - this series reads the source that makes the promise true, and the places where it is not.

Series · 14 parts

One Process, Three Modules

DevMentors' ModularMonolith sample packs three conference-system modules, a mini-framework and one deliberately broken contract into eighty-four C# files - opening a series that reads all of it, defects included.

Series · 11 parts

Real-Time Feeds with FeedR

A guided tour of FeedR, DevMentors' open-source .NET microservices sample for real-time data feeds - six services, Redis pub/sub, Apache Pulsar and a gRPC stream, and the two-tier eventing model that makes it worth reading. Part 1 of a source-level deep dive.

Series · 9 parts

Sagas with Chronicle

Split one database into five services and the transaction you deleted does not disappear - it goes feral. On sagas, compensation, process managers, and Chronicle, the small open-source .NET library this series reads line by line.

Series · 8 parts

Service Discovery Without a Service Mesh

Dozens of Azure Functions and Logic Apps need each other's URLs and keys, and there is no Kubernetes, no sidecar, no mesh to hand them out. How a small .NET library turned one Key Vault and a naming convention into a working discovery layer - the consumer side of a registry made of secrets. Part 1 of a new series.

Series · 11 parts

Six Packages and an Empty Test Project

Reading a repository one project at a time hides everything that lives in the edges between them - and in this estate the edges are where the interesting failures are.

Series · 13 parts

The Convey Consumer Tax

Convey sells a microservice in thirty lines, and Pacco builds ten of them - this series reads the whole estate to price what the framework compresses and what every consumer pays for by hand. Part 1 of The Convey Consumer Tax.

Series · 18 parts

The Database Is the Message Bus

Five executables, zero queues - how an attendance platform coordinated a web app, three Azure Functions and a console job through one SQL database, and what that choice bought and cost. Part 1 of the series.

Series · 16 parts

The Framework Before the Framework

DShop.Common is the shared library nine microservices were built on - and the rough draft of a framework its authors later shipped as Convey.

Series · 15 parts

The Framework Underneath

Every modular monolith claims its modules are decoupled. Inflow proves it the only way that counts - by having no project reference between any two of them - and then has to build a whole mini-framework to make that survivable. Part 1 of a source-read through the shared layer.

Series · 15 parts

The Order That Choreographs Itself

Nobody in Pacco approves an order - a vehicle reservation does. A tour of DevMentors' parcel-delivery estate, the domain it models, and the fifteen-part series it earns.

Series · 11 parts

The Repo Is the Lesson

Inflow ships an executable request collection - five .rest files, thirty-seven requests. On a fresh clone nine of them return a 2xx, and eight of those nine are in one file. This series reads the repository itself as the artefact.

Series · 15 parts

Trill — Reading the Services

Trill's Stories service is four projects with a dependency-free domain at the bottom. Its Users service is two projects with everything in one assembly - same author, same week, same estate, opposite answers to what a layer is.

Series · 15 parts

Trill — The Microservices Spine

The DevMentors Trill estate is a nine-service microservices sample spread over eleven sibling repositories with no README, no clone script and no bootstrap tooling - and the only artefact that names the whole system is a Visual Studio solution file.

Coming soon · 1 part

Aspire in Production

What .NET Aspire actually does for a real multi-service system - the AppHost model, service defaults, the dashboard, and the road from F5 to deployment.

Coming soon in .NET
Coming soon Nov 2025

The Dashboard You Get for Free

Wire four services into a .NET Aspire AppHost and run it once - traces, logs, health and environment variables for the whole system, before you have written a single line of observability code. Part 1 of a series on Aspire in production.

Standalone articles
.NET 26 Apr 2025

Getting Transactions Right with EF Core

SaveChanges is already a transaction, until it isn't enough. A tour of explicit transactions, TransactionScope, execution strategies and the failure modes that only show up in production.

Everything in .NET View
Architecture 15 Nov 2025

The Road Out of the Monolith

Which of ModularMonolith's three modules could become a service tomorrow, what blocks the other two, and the hardening bill the sample never pays - a retrospective on the modular monolith as a station, not a destination.

Architecture 14 Nov 2025

Two Modules, Three Months of Drift

Conferences and Speakers disagree on layout, naming, id policy, exception visibility, mapping style and route constraints - plus a 200 that returns nothing and a broker that threw NotImplementedException for four months. The honest ledger.

Architecture 13 Nov 2025

Exception Names Become Error Codes

One middleware turns ConferenceNotFoundException into the wire code conference_not_found via Humanizer - a naming convention promoted to API contract, with a 400-versus-404 tension and Error-level logs it never resolved.

Architecture 13 Nov 2025

Invariants Enforced by Comment

ModularMonolith's entities are public-setter data bags, its one immutability rule is a fixup with a comment, and its hardest domain question is asked in a comment and answered by nothing - a reading of domain modelling by annotation.

Architecture 12 Nov 2025

Two Repositories, One Winner

Conferences registers in-memory and EF repositories for the same interfaces and lets last-registration-wins pick - a live lesson in DI as strategy selector, dead registrations as fossils, and a no-op UpdateAsync nobody deleted.

Architecture 11 Nov 2025

One Flag, Two Failure Modes

A single boolean in appsettings decides whether ModularMonolith's events run inside your HTTP request or on a background pump - and each setting fails differently. Delivery semantics, read honestly from a ternary.

Architecture 11 Nov 2025

The Database Splits Before the App Does

One Postgres database, one schema per module, and entity configurations that are all empty bodies - what ModularMonolith's data layer declares about future service boundaries, and what its migrations quietly gave away.

Architecture 10 Nov 2025

One Rename Broke the Only Contract

The last commit of ModularMonolith renames Name to ConferenceName in the subscriber's copy of its one integration event - and the JSON translator has delivered null into that field ever since. Anatomy of a silent contract break.

Architecture 09 Nov 2025

An Event Bus in Seven Files

ModularMonolith builds its message broker from System.Threading.Channels and one BackgroundService - a textbook Message Channel and Event-Driven Consumer in miniature, with every missing enterprise-integration pattern visible by its absence.

Architecture 09 Nov 2025

Serialize, Deserialize, Deliver

ModularMonolith routes events between modules by class name and converts them by JSON round-trip - a one-line Message Translator that lets modules share contracts without sharing types, at a price the next part collects.

Architecture 08 Nov 2025

Startup Order Is Load-Bearing

The last commit of ModularMonolith moves one line of Startup from first to last - and the whole cross-module event system depends on it. Assembly scanning, throwaway service providers and migrations inside ConfigureServices.

Architecture 07 Nov 2025

Add, Use, Repeat — The Module Recipe

Every module in ModularMonolith plugs in through the same Add/Use extension pair - a recipe small enough to memorise, complete enough to be a mini-framework, and visible even where a module registers nothing at all.

Architecture 06 Nov 2025

The Compiler Guards the Module Border

ModularMonolith makes every controller internal and teaches MVC to find them anyway - compile-time module isolation from one feature provider, an InternalsVisibleTo chain, and the one place the wall has a hole.

Architecture 06 Nov 2025

Three Modules, One Process

DevMentors' ModularMonolith sample packs three conference-system modules, a mini-framework and one deliberately broken contract into eighty-four C# files - opening a series that reads all of it, defects included.

.NET 04 Nov 2025

The Graveyard of Registered Dependencies

Redis registered in nine services and read in one, discovery stacks in services that never call anyone, an outbox package referenced but never wired, and versions that float by construction - an inventory of everything Pacco wires up and never uses.

.NET 04 Nov 2025

The Price of No Shared Kernel

The retrospective, with the ledger totalled - seven byte-identical MessageBrokers, one AggregateRoot with three meanings, what Convey genuinely optimises, where a Convey.Bootstrap meta-layer should have stood, and what a consumer should copy from this estate.

.NET 03 Nov 2025

A Smell Audit With Prescriptions

A refactoring.guru walk through Pacco's real lines - a flags-enum search that can never match, twin guards, a dead password check, mappers that return null, and an Id that is never assigned - each smell named and each paired with the technique that cures it.

.NET 02 Nov 2025

AI in a Startup

The self-styled uber AI order maker resolves to FirstOrDefault behind an in-source confession, and its reservation heuristic structurally out-bids every earlier booking - the estate's data-science audit, written up as the short honest piece its eleven lines deserve.

.NET 02 Nov 2025

The Saga That Rides a Header

OrderMaker drives a whole order through a Chronicle saga and reports its progress in a single RabbitMQ header - stamped on every publish, forwarded by seven copied MessageBrokers, read back by Operations, and backed by a saga store that forgets everything on restart.

.NET 01 Nov 2025

Two Ways to Tell a Service Something Changed

Deliveries maps domain events into integration events that carry facts while Vehicles publishes bare ids straight from its handlers - two event philosophies in one estate, and a vehicle-to-resource mirror that syncs deletes but never creates.

.NET 31 Oct 2025

A Shadow Registry of Every Message

Operations subscribes to eighty estate messages from one hand-maintained JSON file - a shadow copy of every contract in the system that nothing validates, with ghost entries nobody publishes and real rejections it never lists.

.NET 31 Oct 2025

Pacts Through a Folder Six Levels Up

Orders and Parcels keep the estate's only cross-service contract honest with Pactify - a pact written to a relative path six directories above the repository, verified against a seeded Huge Weapon, and checked for shape only. Consumer-driven contracts with no broker, read from source.

.NET 30 Oct 2025

The Test Pyramid CI Never Runs

Nine Pacco repositories run dotnet test against zero test projects and stay vacuously green, while the one repo with a real unit-integration-e2e-performance pyramid is the only one whose Travis config omits the test step.

.NET 29 Oct 2025

A Service in Thirty Lines

The fair part of the ledger - how UseDispatcherEndpoints, self-identifying commands, afterDispatch hooks and snake_case conventions let every Pacco service put its whole HTTP surface in one readable file.

.NET 29 Oct 2025

One Index Across Ten Services

Pacco models aggregates-per-document honestly across ten Mongo databases, and then creates exactly one index in the whole estate - fire-and-forget, in a scope that has already been disposed - while natural-key scans sit on the message hot path.