JoeDevSharp.WinForms.Extensions.RouteManager 2.0.3

dotnet add package JoeDevSharp.WinForms.Extensions.RouteManager --version 2.0.3
                    
NuGet\Install-Package JoeDevSharp.WinForms.Extensions.RouteManager -Version 2.0.3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="JoeDevSharp.WinForms.Extensions.RouteManager" Version="2.0.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="JoeDevSharp.WinForms.Extensions.RouteManager" Version="2.0.3" />
                    
Directory.Packages.props
<PackageReference Include="JoeDevSharp.WinForms.Extensions.RouteManager" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add JoeDevSharp.WinForms.Extensions.RouteManager --version 2.0.3
                    
#r "nuget: JoeDevSharp.WinForms.Extensions.RouteManager, 2.0.3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=JoeDevSharp.WinForms.Extensions.RouteManager&version=2.0.3
                    
Install as a Cake Addin
#tool nuget:?package=JoeDevSharp.WinForms.Extensions.RouteManager&version=2.0.3
                    
Install as a Cake Tool

📚 JoeDevSharp.WinForms.Extensions.RouteManager

Overview

RouteManager is a flexible navigation framework designed for WinForms applications, enabling structured, declarative routing between views. It supports:

  • Centralized route definitions
  • Multiple navigation modes (embedded, modal, integrated, etc.)
  • Access control and route guards
  • Route injection and dynamic component instantiation
  • History tracking (optional)

🚀 Quick Start

✅ Step 1: Define Routes

Define all available routes in your application using the fluent RouteBuilder syntax. Here's a clean, real-world example using nested routes with descriptions and navigation types.

internal static class AppRoutes
{
    public static Routes Main => new()
    {
        RouteBuilder<Users>.Create("Users")
            .WithTitle("Utilisateurs")
            .WithDescription("Gestion des utilisateurs")
            .WithChildren([
                RouteBuilder<UserDetails>.Create("UserDetails")
                    .WithTitle("Détails de l'utilisateur")
                    .WithDescription("Affiche les détails d'un utilisateur spécifique.")
                    .Build(),

                RouteBuilder<UserSettings>.Create("UserSettings")
                    .WithTitle("Paramètres de l'utilisateur")
                    .WithDescription("Permet de modifier les paramètres d'un utilisateur.")
                    .Build(),

                RouteBuilder<UserAdd>.Create("UserAdd")
                    .WithTitle("Ajouter un utilisateur")
                    .WithDescription("Permet d'ajouter un nouvel utilisateur.")
                    .WithNavigationType(NavigationType.Dialog)
                    .Build()
            ])
            .Build(),
    };
}

✅ Step 2: Initialize Router in Your Main Form

using JoeDevSharp.WinForms.Extensions.RouteManager;

namespace WinFormsApp
{
    public partial class Main : Form
    {
        public Router Router;

        public Main()
        {
            InitializeComponent();

            // Initialize router with route list and target container
            Router = new Router(AppRoutes.Main, this);

            // Navigate to default route
            Router.To("Users");
        }

        private void detailsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Router.To("UserDetails");
        }

        private void settingToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Router.To("UserSettings");
        }

        private void usersToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Router.To("Users");
        }

        private void addUserToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Router.To("UserAdd");
        }
    }
}

Router supports multiple navigation modes, controlled via the NavigationType enum:

NavigationType Behavior
Navigation Embeds the form inside a container (RouterContainer)
Dialog Shows the form as a blocking dialog
Show Opens the form in a new window
CustomDialog Placeholder for advanced modal logic
Integrate Full-screen transparent overlay (e.g., for HUD)

🛡️ Access Control and Guards

  • Router supports access-level filtering using the optional accessLevel parameter.
  • Route transitions can be intercepted using the BodyGuard event.

Example:

Router.BodyGuard += (sender, args) =>
{
    var guard = (BodyGuard)sender;
    Console.WriteLine($"Navigating from {guard.From?.Name} to {guard.To.Name}");
};

💡 Property Injection

At navigation time, you can inject properties into target forms:

Router.To("UserDetails", new Dictionary<string, object>
{
    { "UserId", 42 }
});

🧠 Best Practices

  • Use RouteBuilder<T> for type-safe definitions.
  • Group routes by domain (e.g., users, settings).
  • Avoid hardcoding navigation logic in UI components; route names should act as abstractions.
  • Document route Title and Description for UI/UX traceability.

📦 Package Structure (Suggested)

/WinFormsApp
│
├── /Views
│   ├── Users.cs
│   ├── UserDetails.cs
│   ├── UserSettings.cs
│   └── UserAdd.cs
│
├── /Routing
│   └── AppRoutes.cs
│
└── Main.cs
Product Compatible and additional computed target framework versions.
.NET net8.0-windows7.0 is compatible.  net9.0-windows was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0-windows7.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.0.3 91 6/21/2025
2.0.1 139 6/17/2025
2.0.0 135 6/16/2025