File: DocumentExtractionClientBuilderServiceCollectionExtensions.cs
Web Access
Project: src\src\Libraries\Microsoft.Extensions.DocumentExtraction\Microsoft.Extensions.DocumentExtraction.csproj (Microsoft.Extensions.DocumentExtraction)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DocumentExtraction;
using Microsoft.Shared.Diagnostics;
 
namespace Microsoft.Extensions.DependencyInjection;
 
/// <summary>
/// Provides dependency-injection registration methods for extraction clients.
/// </summary>
public static class DocumentExtractionClientBuilderServiceCollectionExtensions
{
    /// <summary>
    /// Registers a document extraction client and returns its middleware builder.
    /// </summary>
    /// <remarks>
    /// The supplied inner client can only be registered as a singleton. The container owns the
    /// composed pipeline and disposes the inner client when the container is disposed.
    /// Use the factory overload to create independent clients for scoped or transient lifetimes.
    /// </remarks>
    /// <returns>The middleware builder.</returns>
    public static DocumentExtractionClientBuilder AddDocumentExtractionClient(
        this IServiceCollection services,
        DocumentExtractionClient innerClient,
        ServiceLifetime lifetime = ServiceLifetime.Singleton)
    {
        _ = Throw.IfNull(services);
        _ = Throw.IfNull(innerClient);
        if (lifetime != ServiceLifetime.Singleton)
        {
            Throw.ArgumentOutOfRangeException(nameof(lifetime), lifetime, "An existing client instance requires a singleton lifetime.");
        }
 
        return AddDocumentExtractionClient(services, _ => innerClient, lifetime);
    }
 
    /// <summary>
    /// Registers a document extraction client factory and returns its middleware builder.
    /// </summary>
    /// <returns>The middleware builder.</returns>
    public static DocumentExtractionClientBuilder AddDocumentExtractionClient(
        this IServiceCollection services,
        Func<IServiceProvider, DocumentExtractionClient> innerClientFactory,
        ServiceLifetime lifetime = ServiceLifetime.Singleton)
    {
        _ = Throw.IfNull(services);
        _ = Throw.IfNull(innerClientFactory);
 
        DocumentExtractionClientBuilder builder = new(innerClientFactory);
        services.Add(new ServiceDescriptor(
            typeof(DocumentExtractionClient),
            serviceProvider => builder.Build(serviceProvider),
            lifetime));
        return builder;
    }
 
    /// <summary>
    /// Registers a keyed document extraction client factory and returns its middleware builder.
    /// </summary>
    /// <returns>The middleware builder.</returns>
    public static DocumentExtractionClientBuilder AddKeyedDocumentExtractionClient(
        this IServiceCollection services,
        object? serviceKey,
        Func<IServiceProvider, DocumentExtractionClient> innerClientFactory,
        ServiceLifetime lifetime = ServiceLifetime.Singleton)
    {
        _ = Throw.IfNull(services);
        _ = Throw.IfNull(innerClientFactory);
 
        DocumentExtractionClientBuilder builder = new(innerClientFactory);
        services.Add(new ServiceDescriptor(
            typeof(DocumentExtractionClient),
            serviceKey,
            (serviceProvider, _) => builder.Build(serviceProvider),
            lifetime));
        return builder;
    }
}