< Summary

Information
Class: Fluorite.Strainer.Services.Configuration.GenericModuleLoadingStrategy
Assembly: Fluorite.Strainer
File(s): /builds/fluorite/strainer/src/Strainer/Services/Configuration/GenericModuleLoadingStrategy.cs
Line coverage
100%
Covered lines: 15
Uncovered lines: 0
Coverable lines: 15
Total lines: 33
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Load(...)100%44100%

File(s)

/builds/fluorite/strainer/src/Strainer/Services/Configuration/GenericModuleLoadingStrategy.cs

#LineLine coverage
 1using Fluorite.Strainer.Services.Modules;
 2
 3namespace Fluorite.Strainer.Services.Configuration;
 4
 5public class GenericModuleLoadingStrategy : IGenericModuleLoadingStrategy, IModuleLoadingStrategy
 6{
 7    private readonly IStrainerModuleBuilderFactory _strainerModuleBuilderFactory;
 8
 129    public GenericModuleLoadingStrategy(IStrainerModuleBuilderFactory strainerModuleBuilderFactory)
 10    {
 1211        _strainerModuleBuilderFactory = Guard.Against.Null(strainerModuleBuilderFactory);
 1212    }
 13
 14    public void Load(IStrainerModule strainerModule)
 15    {
 316        Guard.Against.Null(strainerModule);
 17
 318        var genericStrainerModuleInterfaceType = strainerModule
 319            .GetType()
 320            .GetInterfaces()
 1021            .FirstOrDefault(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IStrainerModule<>));
 322        if (genericStrainerModuleInterfaceType is null)
 23        {
 124            throw new ArgumentException("Strainer module must be generic.", nameof(strainerModule));
 25        }
 26
 227        var moduleTypeParameter = genericStrainerModuleInterfaceType.GetGenericArguments().First();
 228        var builder = _strainerModuleBuilderFactory.Create(moduleTypeParameter, strainerModule);
 229        var method = genericStrainerModuleInterfaceType.GetMethod(nameof(IStrainerModule<object>.Load));
 30
 231        method.Invoke(strainerModule, new[] { builder });
 232    }
 33}