using System; using LightInject; using Umbraco.Core.Cache; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.Repositories.Implement; namespace Umbraco.Core.Composing.CompositionRoots { /// /// Sets the IoC container for the umbraco data layer/repositories/sql/database/etc... /// public sealed class RepositoryCompositionRoot : ICompositionRoot { public const string DisabledCache = "DisabledCache"; public void Compose(IServiceRegistry container) { // register cache helpers // the main cache helper is registered by CoreBootManager and is used by most repositories // the disabled one is used by those repositories that have an annotated ctor parameter container.RegisterSingleton(factory => CacheHelper.CreateDisabledCacheHelper(), DisabledCache); // resolve ctor dependency from GetInstance() runtimeArguments, if possible - 'factory' is // the container, 'info' describes the ctor argument, and 'args' contains the args that // were passed to GetInstance() - use first arg if it is the right type, // // for ... //container.RegisterConstructorDependency((factory, info, args) => //{ // if (info.Member.DeclaringType != typeof(EntityContainerRepository)) return default; // return args.Length > 0 && args[0] is Guid guid ? guid : default; //}); // register repositories // repos depend on various things, // some repositories have an annotated ctor parameter to pick the right cache helper // repositories container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); // repositories that depend on a filesystem // these have an annotated ctor parameter to pick the right file system container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); container.RegisterSingleton(); } } }