< Summary

Information
Class: IceRpc.Extensions.DependencyInjection.Internal.DispatcherBuilder
Assembly: IceRpc.Extensions.DependencyInjection
File(s): /home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc.Extensions.DependencyInjection/Internal/DispatcherBuilder.cs
Tag: 275_13775359185
Line coverage
96%
Covered lines: 31
Uncovered lines: 1
Coverable lines: 32
Total lines: 58
Line coverage: 96.8%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage
87%
Covered methods: 7
Total methods: 8
Method coverage: 87.5%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_ServiceProvider()100%11100%
Map(...)100%11100%
Mount(...)100%11100%
Route(...)100%210%
Use(...)100%11100%
.ctor(...)100%11100%
Build()100%11100%
.ctor(...)100%11100%

File(s)

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

#LineLine coverage
 1// Copyright (c) ZeroC, Inc.
 2
 3using IceRpc.Features;
 4using Microsoft.Extensions.DependencyInjection;
 5using System.Runtime.CompilerServices;
 6
 7namespace IceRpc.Extensions.DependencyInjection.Internal;
 8
 9/// <summary>Implements <see cref="IDispatcherBuilder" /> for Microsoft's DI container.</summary>
 10internal sealed class DispatcherBuilder : IDispatcherBuilder
 11{
 9412    public IServiceProvider ServiceProvider { get; }
 13
 14    private readonly Router _router;
 15
 16    public IDispatcherBuilder Map<TService>(string path) where TService : notnull
 1417    {
 1418        _router.Map(path, new ServiceAdapter<TService>());
 1419        return this;
 1420    }
 21
 22    public IDispatcherBuilder Mount<TService>(string prefix) where TService : notnull
 123    {
 124        _router.Mount(prefix, new ServiceAdapter<TService>());
 125        return this;
 126    }
 27
 28    public void Route(string prefix, Action<IDispatcherBuilder> configure) =>
 029        _router.Route(prefix, router => configure(new DispatcherBuilder(router, ServiceProvider)));
 30
 31    public IDispatcherBuilder Use(Func<IDispatcher, IDispatcher> middleware)
 1932    {
 1933        _router.Use(middleware);
 1934        return this;
 1935    }
 36
 37    internal DispatcherBuilder(IServiceProvider provider)
 1538        : this(new Router(), provider)
 1539    {
 1540    }
 41
 1542    internal IDispatcher Build() => new InlineDispatcher(async (request, cancellationToken) =>
 9143    {
 9144        AsyncServiceScope asyncScope = ServiceProvider.CreateAsyncScope();
 9145        await using ConfiguredAsyncDisposable _ = asyncScope.ConfigureAwait(false);
 1546
 9147        request.Features = request.Features.With<IServiceProviderFeature>(
 9148            new ServiceProviderFeature(asyncScope.ServiceProvider));
 1549
 9150        return await _router.DispatchAsync(request, cancellationToken).ConfigureAwait(false);
 9851    });
 52
 1553    private DispatcherBuilder(Router router, IServiceProvider provider)
 1554    {
 1555        _router = router;
 1556        ServiceProvider = provider;
 1557    }
 58}