< Summary

Information
Class: MyNet.Globalization.Localization.Providers.Factories.LocalizationServiceFactory<T>
Assembly: MyNet.Globalization
File(s): https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.Globalization/Localization/Providers/Factories/LocalizationServiceFactory.cs
Tag: 323_28699572109
Line coverage
100%
Covered lines: 13
Uncovered lines: 0
Coverable lines: 13
Total lines: 63
Line coverage: 100%
Branch coverage
75%
Covered branches: 6
Total branches: 8
Branch coverage: 75%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)50%44100%
get_TargetType()100%11100%
Create(...)100%44100%

File(s)

https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.Globalization/Localization/Providers/Factories/LocalizationServiceFactory.cs

#LineLine coverage
 1// -----------------------------------------------------------------------
 2// <copyright file="LocalizationServiceFactory.cs" company="Stéphane ANDRE">
 3// Copyright (c) Stéphane ANDRE. All rights reserved.
 4// </copyright>
 5// -----------------------------------------------------------------------
 6
 7using System;
 8using System.Collections.Frozen;
 9using System.Collections.Generic;
 10using System.Globalization;
 11using MyNet.Globalization.Localization.Policies;
 12using MyNet.Primitives.Comparers;
 13
 14namespace MyNet.Globalization.Localization.Providers.Factories;
 15
 16/// <summary>
 17/// A localization service factory that maps specific cultures to their corresponding service factories,
 18/// allowing for culture-specific localization services with configurable <see cref="ICultureFallbackPolicy"/>.
 19/// </summary>
 20/// <param name="factories">A dictionary mapping cultures to their corresponding service factories.</param>
 21/// <param name="defaultFactory">The default service factory to use when no specific factory is found for a culture.</pa
 22/// <param name="fallbackPolicy">
 23/// The culture fallback policy. Defaults to <see cref="CultureFallbackPolicies.ParentCulture"/>.
 24/// Use <see cref="CultureFallbackPolicies.None"/> to disable fallback.
 25/// </param>
 26/// <typeparam name="TService">The type of the localization service.</typeparam>
 27public sealed class LocalizationServiceFactory<TService>(
 28    IDictionary<CultureInfo, Func<TService>> factories,
 29    Func<CultureInfo, TService> defaultFactory,
 30    ICultureFallbackPolicy? fallbackPolicy = null)
 31    : ILocalizationServiceFactory<TService>
 32    where TService : class, ICultureScoped
 33{
 38034    private readonly FrozenDictionary<CultureInfo, Func<TService>> _cultureFactories = factories.ToFrozenDictionary(Cult
 38035    private readonly Func<CultureInfo, TService> _defaultFactory = defaultFactory ?? throw new ArgumentNullException(nam
 38036    private readonly ICultureFallbackPolicy _fallbackPolicy = fallbackPolicy ?? CultureFallbackPolicies.ParentCulture;
 37
 38    /// <inheritdoc />
 5339    public Type TargetType => typeof(TService);
 40
 41    /// <inheritdoc />
 42    public TService Create(CultureInfo culture)
 43    {
 12344        ArgumentNullException.ThrowIfNull(culture);
 45
 12346        var current = culture;
 47
 14448        while (true)
 49        {
 26750            if (_cultureFactories.TryGetValue(current, out var factory))
 9951                return factory();
 52
 16853            var fallback = _fallbackPolicy.GetFallback(current);
 16854            if (fallback is null)
 55                break;
 56
 14457            current = fallback;
 58        }
 59
 2460        return _defaultFactory(culture);
 61    }
 62}
 63