// Copyright Epic Games, Inc. All Rights Reserved. using System; using EpicGames.Core; using EpicGames.Horde.Storage; using EpicGames.Horde.Storage.Backends; using EpicGames.Horde.Storage.Bundles; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; namespace EpicGames.Horde { /// /// Extension methods for Horde /// public static class HordeExtensions { /// /// Adds Horde-related services with the default settings /// /// Collection to register services with public static void AddHorde(this IServiceCollection serviceCollection) { static StorageBackendCache CreateBackendCache(IServiceProvider serviceProvider) { StorageBackendCacheOptions options = serviceProvider.GetRequiredService>().Value.BackendCache; DirectoryReference? cacheDir = String.IsNullOrEmpty(options.CacheDir) ? null : new DirectoryReference(options.CacheDir); return new StorageBackendCache(cacheDir, options.MaxSize, serviceProvider.GetRequiredService>()); } serviceCollection.AddLogging(); serviceCollection.AddHttpClient(); serviceCollection.AddSingleton(sp => new BundleCache(sp.GetRequiredService>().Value.BundleCache)); serviceCollection.AddSingleton(CreateBackendCache); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(sp => sp.GetRequiredService().Create()); serviceCollection.AddSingleton(); } /// /// Adds Horde-related services /// /// Collection to register services with /// Callback to configure options public static void AddHorde(this IServiceCollection serviceCollection, Action configureHorde) { serviceCollection.Configure(configureHorde); AddHorde(serviceCollection); } } }