< Summary

Information
Class: MyNet.UI.Navigation.ServiceCollectionExtensions
Assembly: MyNet.UI
File(s): https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.UI/Navigation/Extensions/ServiceCollectionExtensions.cs
Tag: 323_28699572109
Line coverage
53%
Covered lines: 8
Uncovered lines: 7
Coverable lines: 15
Total lines: 93
Line coverage: 53.3%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
AddNavigation(...)100%11100%
AddNavigationGuard(...)100%210%
AddNavigationGuard(...)100%11100%
AddNavigationMiddleware(...)100%210%
AddNavigationMiddleware(...)100%210%

File(s)

https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.UI/Navigation/Extensions/ServiceCollectionExtensions.cs

#LineLine coverage
 1// -----------------------------------------------------------------------
 2// <copyright file="ServiceCollectionExtensions.cs" company="Stéphane ANDRE">
 3// Copyright (c) Stéphane ANDRE. All rights reserved.
 4// </copyright>
 5// -----------------------------------------------------------------------
 6
 7using System;
 8using Microsoft.Extensions.DependencyInjection;
 9using Microsoft.Extensions.DependencyInjection.Extensions;
 10
 11#pragma warning disable IDE0130
 12namespace MyNet.UI.Navigation;
 13#pragma warning restore IDE0130
 14
 15/// <summary>
 16/// Extension methods for registering navigation services.
 17/// </summary>
 18public static class ServiceCollectionExtensions
 19{
 20    extension(IServiceCollection services)
 21    {
 22        /// <summary>
 23        /// Registers the modern navigation stack with its default implementations.
 24        /// </summary>
 25        /// <returns>The same service collection for chaining.</returns>
 26        public IServiceCollection AddNavigation()
 27        {
 2428            services.TryAddSingleton<INavigationJournal, NavigationJournal>();
 2429            services.TryAddSingleton<INavigationLifecycle, NavigationLifecycle>();
 2430            services.TryAddSingleton<INavigationService, NavigationService>();
 2431            services.TryAddSingleton<INavigationClient, NavigationClient>();
 32
 2433            return services;
 34        }
 35
 36        /// <summary>
 37        /// Registers a navigation guard implementation.
 38        /// Guards run in registration order; the first guard returning <see langword="false"/> cancels navigation.
 39        /// </summary>
 40        /// <typeparam name="TGuard">Guard implementation type.</typeparam>
 41        /// <returns>The same service collection for chaining.</returns>
 42        public IServiceCollection AddNavigationGuard<TGuard>()
 43            where TGuard : class, INavigationGuard
 44        {
 045            services.TryAddEnumerable(ServiceDescriptor.Singleton<INavigationGuard, TGuard>());
 046            return services;
 47        }
 48
 49        /// <summary>
 50        /// Registers a navigation guard instance.
 51        /// Guards run in registration order; the first guard returning <see langword="false"/> cancels navigation.
 52        /// </summary>
 53        /// <typeparam name="TGuard">Guard contract type.</typeparam>
 54        /// <param name="guard">Guard instance.</param>
 55        /// <returns>The same service collection for chaining.</returns>
 56        public IServiceCollection AddNavigationGuard<TGuard>(TGuard guard)
 57            where TGuard : class, INavigationGuard
 58        {
 659            ArgumentNullException.ThrowIfNull(guard);
 660            services.TryAddEnumerable(ServiceDescriptor.Singleton<INavigationGuard>(guard));
 661            return services;
 62        }
 63
 64        /// <summary>
 65        /// Registers a navigation middleware implementation.
 66        /// Middleware runs in registration order as the outermost layer first (similar to ASP.NET Core).
 67        /// </summary>
 68        /// <typeparam name="TMiddleware">Middleware implementation type.</typeparam>
 69        /// <returns>The same service collection for chaining.</returns>
 70        public IServiceCollection AddNavigationMiddleware<TMiddleware>()
 71            where TMiddleware : class, INavigationMiddleware
 72        {
 073            services.TryAddEnumerable(ServiceDescriptor.Singleton<INavigationMiddleware, TMiddleware>());
 074            return services;
 75        }
 76
 77        /// <summary>
 78        /// Registers a navigation middleware instance.
 79        /// Middleware runs in registration order as the outermost layer first (similar to ASP.NET Core).
 80        /// </summary>
 81        /// <typeparam name="TMiddleware">Middleware contract type.</typeparam>
 82        /// <param name="middleware">Middleware instance.</param>
 83        /// <returns>The same service collection for chaining.</returns>
 84        public IServiceCollection AddNavigationMiddleware<TMiddleware>(TMiddleware middleware)
 85            where TMiddleware : class, INavigationMiddleware
 86        {
 087            ArgumentNullException.ThrowIfNull(middleware);
 088            services.TryAddEnumerable(ServiceDescriptor.Singleton<INavigationMiddleware>(middleware));
 089            return services;
 90        }
 91    }
 92}
 93