< Summary

Information
Class: MyNet.Globalization.Localization.Providers.Factories.LocalizationServiceFactoryBuilder<T>
Assembly: MyNet.Globalization
File(s): https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.Globalization/Localization/Providers/Factories/LocalizationServiceFactoryBuilder.cs
Tag: 323_28699572109
Line coverage
76%
Covered lines: 13
Uncovered lines: 4
Coverable lines: 17
Total lines: 88
Line coverage: 76.4%
Branch coverage
100%
Covered branches: 6
Total branches: 6
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%
SetFallbackPolicy(...)100%210%
SetDefault(...)100%210%
RegisterCulture(...)100%66100%
RegisterCulture(...)100%11100%
Build()100%11100%

File(s)

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

#LineLine coverage
 1// -----------------------------------------------------------------------
 2// <copyright file="LocalizationServiceFactoryBuilder.cs" company="Stéphane ANDRE">
 3// Copyright (c) Stéphane ANDRE. All rights reserved.
 4// </copyright>
 5// -----------------------------------------------------------------------
 6
 7using System;
 8using System.Collections.Generic;
 9using System.Globalization;
 10using MyNet.Globalization.Localization.Policies;
 11using MyNet.Primitives.Comparers;
 12
 13namespace MyNet.Globalization.Localization.Providers.Factories;
 14
 15/// <summary>
 16/// Mutable builder used to configure a culture map service factory.
 17/// </summary>
 18/// <param name="defaultFactory">The default service factory.</param>
 19/// <typeparam name="TService">The service type.</typeparam>
 20public sealed class LocalizationServiceFactoryBuilder<TService>(Func<CultureInfo, TService> defaultFactory)
 21    where TService : class, ICultureScoped
 22{
 38323    private readonly Dictionary<CultureInfo, Func<TService>> _cultureFactories = new(CultureInfoNameComparer.Instance);
 38324    private Func<CultureInfo, TService> _defaultFactory = defaultFactory;
 38325    private ICultureFallbackPolicy _fallbackPolicy = CultureFallbackPolicies.ParentCulture;
 26
 27    /// <summary>
 28    /// Sets the culture fallback policy applied when no factory is found for an exact culture.
 29    /// Defaults to <see cref="CultureFallbackPolicies.ParentCulture"/> (walks up the culture hierarchy).
 30    /// Use <see cref="CultureFallbackPolicies.None"/> to disable fallback.
 31    /// </summary>
 032    public void SetFallbackPolicy(ICultureFallbackPolicy value) => _fallbackPolicy = value;
 33
 34    /// <summary>
 35    /// Sets the default provider factory.
 36    /// </summary>
 37    public LocalizationServiceFactoryBuilder<TService> SetDefault(Func<CultureInfo, TService> factory)
 38    {
 039        ArgumentNullException.ThrowIfNull(factory);
 40
 041        _defaultFactory = factory;
 42
 043        return this;
 44    }
 45
 46    /// <summary>
 47    /// Registers a provider factory for an exact culture.
 48    /// </summary>
 49    public LocalizationServiceFactoryBuilder<TService> RegisterCulture(CultureInfo culture, Func<TService> factory, Cult
 50    {
 64351        ArgumentNullException.ThrowIfNull(culture);
 64352        ArgumentNullException.ThrowIfNull(factory);
 53
 64354        if (_cultureFactories.ContainsKey(culture))
 55        {
 56            switch (behavior)
 57            {
 58                case CultureRegistrationBehavior.SkipIfExists:
 359                    return this;
 60                case CultureRegistrationBehavior.ThrowIfExists:
 361                    throw new InvalidOperationException($"A provider factory is already registered for culture '{culture
 62                case CultureRegistrationBehavior.Replace:
 63                default:
 64                    break;
 65            }
 66        }
 67
 63768        _cultureFactories[culture] = factory;
 69
 63770        return this;
 71    }
 72
 73    /// <summary>
 74    /// Registers a provider factory for the specified culture name.
 75    /// </summary>
 76    public LocalizationServiceFactoryBuilder<TService> RegisterCulture(string cultureName, Func<TService> factory, Cultu
 77    {
 58578        ArgumentException.ThrowIfNullOrWhiteSpace(cultureName);
 79
 58580        return RegisterCulture(CultureInfo.GetCultureInfo(cultureName), factory, behavior);
 81    }
 82
 83    /// <summary>
 84    /// Builds the immutable provider factory.
 85    /// </summary>
 38086    public ILocalizationServiceFactory<TService> Build() => new LocalizationServiceFactory<TService>(_cultureFactories, 
 87}
 88