using Umbraco.Core.Cache;
using Umbraco.Core.Composing;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence;
namespace Umbraco.Core
{
///
/// Provides extension methods to the class.
///
public static class CompositionExtensions
{
#region Essentials
///
/// Registers essential services.
///
public static void RegisterEssentials(this Composition composition,
ILogger logger, IProfiler profiler, IProfilingLogger profilingLogger,
IMainDom mainDom,
AppCaches appCaches,
IUmbracoDatabaseFactory databaseFactory,
TypeLoader typeLoader,
IRuntimeState state)
{
composition.RegisterUnique(logger);
composition.RegisterUnique(profiler);
composition.RegisterUnique(profilingLogger);
composition.RegisterUnique(mainDom);
composition.RegisterUnique(appCaches);
composition.RegisterUnique(databaseFactory);
composition.RegisterUnique(factory => factory.GetInstance().SqlContext);
composition.RegisterUnique(typeLoader);
composition.RegisterUnique(state);
}
#endregion
#region Unique
///
/// Registers a unique service as its own implementation.
///
public static void RegisterUnique(this Composition composition)
=> composition.RegisterUnique(typeof(TService), typeof(TService));
///
/// Registers a unique service with an implementation type.
///
public static void RegisterUnique(this Composition composition)
=> composition.RegisterUnique(typeof(TService), typeof(TImplementing));
///
/// Registers a unique service with an implementation type, for a target.
///
public static void RegisterUniqueFor(this Composition composition)
where TService : class
=> composition.RegisterUniqueFor(typeof(TImplementing));
///
/// Registers a unique service with an implementing instance.
///
public static void RegisterUnique(this Composition composition, TService instance)
=> composition.RegisterUnique(typeof(TService), instance);
#endregion
}
}