A wizard for configuring an NServiceBus endpoint, hosted at https://nservicebuscommunity.github.io/NServiceBusConfigHelper/.
For a new endpoint it asks for the hosting, transport, persistence, serializer and test framework, then for any features: sagas, the outbox, auditing and monitoring, OpenTelemetry, and the NServiceBus Community extensions. It then produces:
- a guide rendered in the page,
- a downloadable zipped solution that builds and runs,
- markdown instructions for an AI coding assistant.
A second entry point adds features to an existing endpoint, and produces only what has to be merged in.
The site is a Blazor WebAssembly app that runs entirely in the browser; nothing is sent to a server.
dotnet run --project src/Wizard.Web
Then browse to http://localhost:5179.
dotnet build src/Wizard.Tests --configuration Release
dotnet run --project src/Wizard.Tests --configuration Release --no-build
The test project publishes the Blazor app after it builds. The Playwright tests serve that published output and drive it in Chromium.
One explicit suite needs network, and is run by a workflow rather than on every build. It writes generated solutions to the temp directory, builds them, runs their tests, and starts the one endpoint that needs nothing installed:
dotnet run --project src/Wizard.Tests --configuration Release --no-build -- --treenode-filter "/*/*/GeneratedSolutionTests/*"
What it does not do is run an endpoint against a real broker or database: every transport and persistence other than the learning ones is proven to compile, not to connect.
Every page's address holds all the answers given so far, so any point in the wizard can be bookmarked or shared. Three entry points are stable:
- https://nservicebuscommunity.github.io/NServiceBusConfigHelper/new starts a new endpoint.
- https://nservicebuscommunity.github.io/NServiceBusConfigHelper/add adds features to an existing one.
https://nservicebuscommunity.github.io/NServiceBusConfigHelper/add/{FeatureId}adds one feature, already selected. An extension's readme can link here, for example https://nservicebuscommunity.github.io/NServiceBusConfigHelper/add/Serilog.
The browser remembers the transport and the persistence of the endpoint features were last added to. The home page has a button that forgets them.
- Add a
FeatureDefinitiontosrc/Wizard.Core/Registry/Features.Data.cs. The xml docs inFeatureDefinition.csandComponentDefinition.csdescribe each member, andRegistryTestschecks most of them. Its position in the list is its position in the generatedProgram.cs. - Add each of its packages to
src/Wizard.Core/Versions/package-versions.jsonwith any version, then run the refresh tool, which moves every package to its newest stable version:dotnet run --project src/Wizard.VersionRefresh -- src/Wizard.Core/Versions/package-versions.json summary.md. - If it cannot be combined with another feature, or needs something outside the generated code, add a
rule to
src/Wizard.Core/Registry/InteractionRules.cs. - Run the tests, accept the new snapshots, then run the generated solution tests to prove its code compiles.
A transport, a persistence or a serializer is added the same way, as an enum member in
src/Wizard.Core/Model/Enums.cs and an entry in Registry/Transports.cs or Registry/Persistences.cs.
deploy.ymlruns the tests and deploys the site on every push to main.integration.ymlbuilds a generated solution per transport, persistence, serializer and feature, nightly and on pull requests that change the generators.refresh-versions.ymlmoves every package to its newest stable version each Monday, and opens a pull request saying whether the generated solutions build with them.