// 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);
}
}
}