Код IT
← Каталог

Паттерн "Фабрика" в C# — когда хватает DI-контейнера — Выбор реализации в рантайме

Фрагмент из «Паттерн "Фабрика" в C# — когда хватает DI-контейнера»: Выбор реализации в рантайме.

csharp projectencyclopedia7-06-proektirovanie-i-arhitektura-design-patterns-119 embed URL статья в энциклопедии
C# main.cs
public class CheckoutService
{
    private readonly IServiceProvider _serviceProvider;

    public CheckoutService(IServiceProvider serviceProvider)
    {
        _serviceProvider = serviceProvider;
    }

    public Task PayAsync(string userChoice)
    {
        var provider = _serviceProvider
            .GetRequiredKeyedService<IPaymentProvider>(userChoice);

        return provider.PayAsync();
    }
}
public class CheckoutService
{
    private readonly IServiceProvider _serviceProvider;

    public CheckoutService(IServiceProvider serviceProvider)
    {
        _serviceProvider = serviceProvider;
    }

    public Task PayAsync(string userChoice)
    {
        var provider = _serviceProvider
            .GetRequiredKeyedService<IPaymentProvider>(userChoice);

        return provider.PayAsync();
    }
}