< Summary

Information
Class: IceRpc.Extensions.DependencyInjection.MiddlewareDispatcherBuilderExtensions
Assembly: IceRpc.Extensions.DependencyInjection
File(s): /home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc.Extensions.DependencyInjection/MiddlewareDispatcherBuilderExtensions.cs
Tag: 275_13775359185
Line coverage
50%
Covered lines: 6
Uncovered lines: 6
Coverable lines: 12
Total lines: 119
Line coverage: 50%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage
100%
Covered methods: 2
Total methods: 2
Method coverage: 100%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
UseMiddleware(...)100%11100%
UseMiddleware(...)100%210%

File(s)

/home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc.Extensions.DependencyInjection/MiddlewareDispatcherBuilderExtensions.cs

#LineLine coverage
 1// Copyright (c) ZeroC, Inc.
 2
 3using IceRpc.Extensions.DependencyInjection.Internal;
 4using Microsoft.Extensions.DependencyInjection;
 5using Microsoft.Extensions.Options;
 6
 7namespace IceRpc.Extensions.DependencyInjection;
 8
 9/// <summary>Provides extension methods for <see cref="IDispatcherBuilder" /> to register middleware.</summary>
 10public static class MiddlewareDispatcherBuilderExtensions
 11{
 12    /// <summary>Registers a middleware with one service dependency in its DispatchAsync method. Such a middleware
 13    /// implements <see cref="IMiddleware{TDep}" /> and provides a single constructor that accepts a dispatcher (the
 14    /// next dispatcher) followed by 0 or more DI-injected services.</summary>
 15    /// <typeparam name="TMiddleware">The type of the middleware to register.</typeparam>
 16    /// <typeparam name="TDep">The type of the service dependency.</typeparam>
 17    /// <param name="builder">This dispatcher builder.</param>
 18    /// <returns>The dispatcher builder.</returns>
 19    public static IDispatcherBuilder UseMiddleware<TMiddleware, TDep>(this IDispatcherBuilder builder)
 20        where TMiddleware : IMiddleware<TDep>
 21        where TDep : notnull =>
 222        builder.Use(next => new MiddlewareAdapter<TDep>(
 223            ActivatorUtilities.CreateInstance<TMiddleware>(builder.ServiceProvider, next)));
 24
 25    /// <summary>Registers a middleware with an explicit Options parameter and with one service dependency in its
 26    /// DispatchAsync method. Such a middleware implements <see cref="IMiddleware{TDep}" /> and provides a single
 27    /// constructor that accepts a dispatcher (the next dispatcher) followed by an instance of
 28    /// <see cref="IOptions{TMiddlewareOptions}" /> and then 0 or more DI-injected services.</summary>
 29    /// <typeparam name="TMiddleware">The type of the middleware to register.</typeparam>
 30    /// <typeparam name="TMiddlewareOptions">The type of the Options parameter of this middleware.</typeparam>
 31    /// <typeparam name="TDep">The type of the service dependency.</typeparam>
 32    /// <param name="builder">This dispatcher builder.</param>
 33    /// <param name="options">The options to give to the constructor of the middleware.</param>
 34    /// <returns>The dispatcher builder.</returns>
 35    public static IDispatcherBuilder UseMiddleware<TMiddleware, TMiddlewareOptions, TDep>(
 36        this IDispatcherBuilder builder,
 37        TMiddlewareOptions options)
 38        where TMiddleware : IMiddleware<TDep>
 39        where TMiddlewareOptions : class
 40        where TDep : notnull =>
 041        builder.Use(next => new MiddlewareAdapter<TDep>(
 042            ActivatorUtilities.CreateInstance<TMiddleware>(builder.ServiceProvider, next, Options.Create(options))));
 43
 44    /// <summary>Registers a middleware with 2 service dependencies in its DispatchAsync method. Such a middleware
 45    /// implements <see cref="IMiddleware{TDep1, TDep2}" /> and provides a single constructor that accepts a dispatcher
 46    /// (the next dispatcher) followed by 0 or more DI-injected services.</summary>
 47    /// <typeparam name="TMiddleware">The type of the middleware to register.</typeparam>
 48    /// <typeparam name="TDep1">The type of the first service dependency.</typeparam>
 49    /// <typeparam name="TDep2">The type of the second service dependency.</typeparam>
 50    /// <param name="builder">This dispatcher builder.</param>
 51    /// <returns>The dispatcher builder.</returns>
 52    public static IDispatcherBuilder UseMiddleware<TMiddleware, TDep1, TDep2>(this IDispatcherBuilder builder)
 53        where TMiddleware : IMiddleware<TDep1, TDep2>
 54        where TDep1 : notnull
 55        where TDep2 : notnull =>
 256        builder.Use(next => new MiddlewareAdapter<TDep1, TDep2>(
 257            ActivatorUtilities.CreateInstance<TMiddleware>(builder.ServiceProvider, next)));
 58
 59    /// <summary>Registers a middleware with an Options parameter and with 2 service dependencies in its DispatchAsync
 60    /// method. Such a middleware implements <see cref="IMiddleware{TDep1, TDep2}" /> and provides a single constructor
 61    /// that accepts a dispatcher (the next dispatcher) followed by an instance of
 62    /// <see cref="IOptions{TMiddlewareOptions}" /> and then 0 or more DI-injected services.</summary>
 63    /// <typeparam name="TMiddleware">The type of the middleware to register.</typeparam>
 64    /// <typeparam name="TMiddlewareOptions">The type of Options parameter of this middleware.</typeparam>
 65    /// <typeparam name="TDep1">The type of the first service dependency.</typeparam>
 66    /// <typeparam name="TDep2">The type of the second service dependency.</typeparam>
 67    /// <param name="builder">This dispatcher builder.</param>
 68    /// <param name="options">The options to give to the constructor of the middleware.</param>
 69    /// <returns>The dispatcher builder.</returns>
 70    public static IDispatcherBuilder UseMiddleware<TMiddleware, TMiddlewareOptions, TDep1, TDep2>(
 71        this IDispatcherBuilder builder,
 72        TMiddlewareOptions options)
 73        where TMiddleware : IMiddleware<TDep1, TDep2>
 74        where TMiddlewareOptions : class
 75        where TDep1 : notnull
 76        where TDep2 : notnull =>
 077        builder.Use(next => new MiddlewareAdapter<TDep1, TDep2>(
 078            ActivatorUtilities.CreateInstance<TMiddleware>(builder.ServiceProvider, next, Options.Create(options))));
 79
 80    /// <summary>Registers a middleware with 3 service dependencies in its DispatchAsync method. Such a middleware
 81    /// implements <see cref="IMiddleware{TDep1, TDep2, TDep3}" /> and provides a single constructor that accepts a
 82    /// dispatcher (the next dispatcher) followed by 0 or more DI-injected services.</summary>
 83    /// <typeparam name="TMiddleware">The type of the middleware to register.</typeparam>
 84    /// <typeparam name="TDep1">The type of the first service dependency.</typeparam>
 85    /// <typeparam name="TDep2">The type of the second service dependency.</typeparam>
 86    /// <typeparam name="TDep3">The type of the third service dependency.</typeparam>
 87    /// <param name="builder">This dispatcher builder.</param>
 88    /// <returns>The dispatcher builder.</returns>
 89    public static IDispatcherBuilder UseMiddleware<TMiddleware, TDep1, TDep2, TDep3>(this IDispatcherBuilder builder)
 90        where TMiddleware : IMiddleware<TDep1, TDep2, TDep3>
 91        where TDep1 : notnull
 92        where TDep2 : notnull
 93        where TDep3 : notnull =>
 294        builder.Use(next => new MiddlewareAdapter<TDep1, TDep2, TDep3>(
 295            ActivatorUtilities.CreateInstance<TMiddleware>(builder.ServiceProvider, next)));
 96
 97    /// <summary>Registers a middleware with an Options parameter and with 3 service dependencies in its DispatchAsync
 98    /// method. Such a middleware implements <see cref="IMiddleware{TDep1, TDep2, TDep3}" /> and provides a single
 99    /// constructor that accepts a dispatcher (the next dispatcher) followed by an instance of
 100    /// <see cref="IOptions{TMiddlewareOptions}" /> and then 0 or more DI-injected services.</summary>
 101    /// <typeparam name="TMiddleware">The type of the middleware to register.</typeparam>
 102    /// <typeparam name="TMiddlewareOptions">The type of Options parameter of this middleware.</typeparam>
 103    /// <typeparam name="TDep1">The type of the first service dependency.</typeparam>
 104    /// <typeparam name="TDep2">The type of the second service dependency.</typeparam>
 105    /// <typeparam name="TDep3">The type of the third service dependency.</typeparam>
 106    /// <param name="builder">This dispatcher builder.</param>
 107    /// <param name="options">The options to give to the constructor of the middleware.</param>
 108    /// <returns>The dispatcher builder.</returns>
 109    public static IDispatcherBuilder UseMiddleware<TMiddleware, TMiddlewareOptions, TDep1, TDep2, TDep3>(
 110        this IDispatcherBuilder builder,
 111        TMiddlewareOptions options)
 112        where TMiddleware : IMiddleware<TDep1, TDep2, TDep3>
 113        where TMiddlewareOptions : class
 114        where TDep1 : notnull
 115        where TDep2 : notnull
 116        where TDep3 : notnull =>
 0117        builder.Use(next => new MiddlewareAdapter<TDep1, TDep2, TDep3>(
 0118            ActivatorUtilities.CreateInstance<TMiddleware>(builder.ServiceProvider, next, Options.Create(options))));
 119}