< Summary

Information
Class: NexusLabs.Needlr.SemanticKernel.KernelFactory
Assembly: NexusLabs.Needlr.SemanticKernel
File(s): /home/runner/work/needlr/needlr/src/NexusLabs.Needlr.SemanticKernel/KernelFactory.cs
Line coverage
96%
Covered lines: 27
Uncovered lines: 1
Coverable lines: 28
Total lines: 52
Line coverage: 96.4%
Branch coverage
83%
Covered branches: 5
Total branches: 6
Branch coverage: 83.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
CreateKernel(...)83.33%66100%
.ctor(...)100%11100%
Dispose()100%210%

File(s)

/home/runner/work/needlr/needlr/src/NexusLabs.Needlr.SemanticKernel/KernelFactory.cs

#LineLine coverage
 1using Microsoft.Extensions.DependencyInjection;
 2using Microsoft.SemanticKernel;
 3
 4using System.Reflection;
 5
 6namespace NexusLabs.Needlr.SemanticKernel;
 7
 328internal sealed class KernelFactory(
 329    IServiceProvider _serviceProvider,
 3210    IPluginFactory _pluginFactory,
 3211    Action<KernelFactoryOptions>? _configure) :
 12    IKernelFactory
 13{
 3214    private readonly Lazy<IReadOnlyList<IKernelBuilderPlugin>> _lazyKernelBuilderPlugins = new(() =>
 3215    {
 2916        return _pluginFactory
 2917            .CreatePluginsFromAssemblies<IKernelBuilderPlugin>(_serviceProvider
 2918                .GetRequiredService<IReadOnlyList<Assembly>>())
 2919            .ToArray();
 3220    });
 21
 22    public Kernel CreateKernel(Action<KernelFactoryOptions>? configure = null)
 23    {
 3124        var scope = _serviceProvider.CreateScope();
 3125        var kernelBuilder = Kernel.CreateBuilder();
 26
 3127        scope.ServiceProvider.CopyRegistrationsToServiceCollection(kernelBuilder.Services);
 28
 3129        KernelBuilderPluginOptions pluginOptions = new(kernelBuilder);
 24830        foreach (var plugin in _lazyKernelBuilderPlugins.Value)
 31        {
 9332            plugin.Configure(pluginOptions);
 33        }
 34
 3135        KernelFactoryOptions kernelFactoryOptions = new(
 3136            scope.ServiceProvider,
 3137            kernelBuilder);
 3138        _configure?.Invoke(kernelFactoryOptions);
 3139        configure?.Invoke(kernelFactoryOptions);
 40
 6241        kernelBuilder.Services.AddSingleton(_ => new ScopeDisposer(scope));
 3142        var kernel = kernelBuilder.Build();
 3143        _ = kernel.Services.GetRequiredService<ScopeDisposer>();
 44
 3145        return kernel;
 46    }
 47
 3148    private sealed class ScopeDisposer(IServiceScope scope) : IDisposable
 49    {
 050        public void Dispose() => scope.Dispose();
 51    }
 52}