< Summary

Information
Class: IceRpc.Extensions.DependencyInjection.Internal.MiddlewareAdapter<T1, T2, T3>
Assembly: IceRpc.Extensions.DependencyInjection
File(s): /home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc.Extensions.DependencyInjection/Internal/MiddlewareAdapter.cs
Tag: 275_13775359185
Line coverage
100%
Covered lines: 12
Uncovered lines: 0
Coverable lines: 12
Total lines: 73
Line coverage: 100%
Branch coverage
50%
Covered branches: 1
Total branches: 2
Branch coverage: 50%
Method coverage
100%
Covered methods: 2
Total methods: 2
Method coverage: 100%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
DispatchAsync(...)50%22100%
.ctor(...)100%11100%

File(s)

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

#LineLine coverage
 1// Copyright (c) ZeroC, Inc.
 2
 3using Microsoft.Extensions.DependencyInjection;
 4
 5namespace IceRpc.Extensions.DependencyInjection.Internal;
 6
 7/// <summary>Adapts a middleware with a single service dependency to an IDispatcher.</summary>
 8internal class MiddlewareAdapter<TDep> : IDispatcher where TDep : notnull
 9{
 10    private readonly IMiddleware<TDep> _middleware;
 11
 12    public ValueTask<OutgoingResponse> DispatchAsync(IncomingRequest request, CancellationToken cancellationToken)
 13    {
 14        IServiceProviderFeature feature = request.Features.Get<IServiceProviderFeature>() ??
 15            throw new InvalidOperationException(
 16                $"There is no {nameof(IServiceProviderFeature)} in the request features.");
 17
 18        return _middleware.DispatchAsync(
 19            request,
 20            feature.ServiceProvider.GetRequiredService<TDep>(),
 21            cancellationToken);
 22    }
 23
 24    internal MiddlewareAdapter(IMiddleware<TDep> middleware) => _middleware = middleware;
 25}
 26
 27/// <summary>Adapts a middleware with 2 service dependencies to an IDispatcher.</summary>
 28internal class MiddlewareAdapter<TDep1, TDep2> : IDispatcher
 29    where TDep1 : notnull
 30    where TDep2 : notnull
 31{
 32    private readonly IMiddleware<TDep1, TDep2> _middleware;
 33
 34    public ValueTask<OutgoingResponse> DispatchAsync(IncomingRequest request, CancellationToken cancellationToken)
 35    {
 36        IServiceProviderFeature feature = request.Features.Get<IServiceProviderFeature>() ??
 37            throw new InvalidOperationException(
 38                $"There is no {nameof(IServiceProviderFeature)} in the request features.");
 39
 40        return _middleware.DispatchAsync(
 41            request,
 42            feature.ServiceProvider.GetRequiredService<TDep1>(),
 43            feature.ServiceProvider.GetRequiredService<TDep2>(),
 44            cancellationToken);
 45    }
 46
 47    internal MiddlewareAdapter(IMiddleware<TDep1, TDep2> middleware) => _middleware = middleware;
 48}
 49
 50/// <summary>Adapts a middleware with 3 service dependencies to an IDispatcher.</summary>
 51internal class MiddlewareAdapter<TDep1, TDep2, TDep3> : IDispatcher
 52    where TDep1 : notnull
 53    where TDep2 : notnull
 54    where TDep3 : notnull
 55{
 56    private readonly IMiddleware<TDep1, TDep2, TDep3> _middleware;
 57
 58    public ValueTask<OutgoingResponse> DispatchAsync(IncomingRequest request, CancellationToken cancellationToken)
 159    {
 160        IServiceProviderFeature feature = request.Features.Get<IServiceProviderFeature>() ??
 161            throw new InvalidOperationException(
 162                $"There is no {nameof(IServiceProviderFeature)} in the request features.");
 63
 164        return _middleware.DispatchAsync(
 165            request,
 166            feature.ServiceProvider.GetRequiredService<TDep1>(),
 167            feature.ServiceProvider.GetRequiredService<TDep2>(),
 168            feature.ServiceProvider.GetRequiredService<TDep3>(),
 169            cancellationToken);
 170    }
 71
 272    internal MiddlewareAdapter(IMiddleware<TDep1, TDep2, TDep3> middleware) => _middleware = middleware;
 73}