< Summary

Information
Class: NexusLabs.Needlr.Injection.Reflection.AssemblyProviderBuilder
Assembly: NexusLabs.Needlr.Injection.Reflection
File(s): /home/runner/work/needlr/needlr/src/NexusLabs.Needlr.Injection.Reflection/AssemblyProviderBuilder.cs
Line coverage
100%
Covered lines: 15
Uncovered lines: 0
Coverable lines: 15
Total lines: 60
Line coverage: 100%
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
.ctor()100%11100%
UseLoader(...)100%11100%
Build()100%11100%
.ctor(...)100%11100%
GetCandidateAssemblies()100%11100%

File(s)

/home/runner/work/needlr/needlr/src/NexusLabs.Needlr.Injection.Reflection/AssemblyProviderBuilder.cs

#LineLine coverage
 1using NexusLabs.Needlr.Injection.Reflection.Loaders;
 2
 3using System.Diagnostics.CodeAnalysis;
 4using System.Reflection;
 5
 6namespace NexusLabs.Needlr.Injection.Reflection;
 7
 8/// <summary>
 9/// Builder for creating assembly providers using reflection-based loaders.
 10/// </summary>
 11/// <remarks>
 12/// <para>
 13/// This builder uses reflection-based assembly loading and is not compatible with NativeAOT or trimming.
 14/// For AOT scenarios, use GeneratedAssemblyProvider from NexusLabs.Needlr.Injection.SourceGen instead.
 15/// </para>
 16/// <para>
 17/// For assembly ordering, use <c>SyringeExtensions.OrderAssemblies</c> after configuring the Syringe.
 18/// </para>
 19/// </remarks>
 20[RequiresUnreferencedCode("AssemblyProviderBuilder uses reflection-based assembly loading. Use GeneratedAssemblyProvider
 21public sealed class AssemblyProviderBuilder : IAssemblyProviderBuilder
 22{
 23    private IAssemblyLoader _assemblyLoader;
 24
 35925    public AssemblyProviderBuilder()
 26    {
 35927        _assemblyLoader = new ReflectionAssemblyLoader();
 35928    }
 29
 30    public AssemblyProviderBuilder UseLoader(IAssemblyLoader loader)
 31    {
 2532        ArgumentNullException.ThrowIfNull(loader);
 2433        _assemblyLoader = loader;
 2434        return this;
 35    }
 36
 37    public IAssemblyProvider Build()
 38    {
 35839        return new AssemblyProvider(_assemblyLoader);
 40    }
 41
 42    private sealed class AssemblyProvider : IAssemblyProvider
 43    {
 44        private readonly Lazy<IReadOnlyList<Assembly>> _lazyAssemblies;
 45
 35846        public AssemblyProvider(IAssemblyLoader assemblyLoader)
 47        {
 35848            ArgumentNullException.ThrowIfNull(assemblyLoader);
 49
 35850            _lazyAssemblies = new(() =>
 35851            {
 30252                return assemblyLoader.LoadAssemblies(continueOnAssemblyError: true);
 35853            });
 35854        }
 55
 56        /// <inheritdoc />
 57        public IReadOnlyList<Assembly> GetCandidateAssemblies()
 30258            => _lazyAssemblies.Value;
 59    }
 60}