diff --git a/src/Umbraco.Core/DependencyInjection/RepositoryCompositionRoot.cs b/src/Umbraco.Core/DependencyInjection/RepositoryCompositionRoot.cs index 2f3657991d..25487cffd9 100644 --- a/src/Umbraco.Core/DependencyInjection/RepositoryCompositionRoot.cs +++ b/src/Umbraco.Core/DependencyInjection/RepositoryCompositionRoot.cs @@ -1,5 +1,7 @@ using System; +using System.Linq; using LightInject; +using Umbraco.Core.Cache; using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.IO; @@ -43,102 +45,77 @@ namespace Umbraco.Core.DependencyInjection //NOTE: Wondering if we can pass in parameters at resolution time with LightInject // without having to manually specify the ctor for each one, have asked here: https://github.com/seesharper/LightInject/issues/237 container.Register((factory, work) => new NotificationsRepository(work, factory.GetInstance())); + container.Register((factory, work) => new ExternalLoginRepository( work, factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance())); - container.Register((factory, work) => new PublicAccessRepository( + + //here we are using some nice IoC magic: + //https://github.com/seesharper/LightInject/issues/237 + //This tells the container that anytime there is a ctor dependency for IDatabaseUnitOfWork and it's available as the first + //arg in the runtimeArgs, to use that. This means we donn't have to explicitly define all ctor's for all repositories which + //saves us a lot of code. + container.RegisterConstructorDependency((factory, info, runtimeArguments) => + { + var uow = runtimeArguments.Length > 0 ? runtimeArguments[0] as IDatabaseUnitOfWork : null; + return uow; + }); + //This ensures that the correct CacheHelper is returned for the right repos + container.RegisterConstructorDependency((factory, info, runtimeArguments) => + { + var declaringType = info.Member.DeclaringType; + var disabledCacheRepos = new[] + { + typeof (ITaskRepository), + typeof (ITaskTypeRepository), + typeof (IAuditRepository), + typeof (IRelationRepository), + typeof(IRelationTypeRepository), + typeof (IMigrationEntryRepository) + }; + return disabledCacheRepos.Any(x => TypeHelper.IsTypeAssignableFrom(x, declaringType)) + ? factory.GetInstance("DisabledCache") + : factory.GetInstance(); + }); + + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + container.Register(); + + //These repo registrations require custom injections so we need to define them: + + container.Register((factory, work) => new ServerRegistrationRepository( work, - factory.GetInstance(), + factory.GetInstance().StaticCache, //special static cache scenario factory.GetInstance(), factory.GetInstance(), factory.GetInstance())); - container.Register((factory, work) => new TaskRepository( - work, - factory.GetInstance("DisabledCache"), //never cache - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new AuditRepository( - work, - factory.GetInstance("DisabledCache"), //never cache - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new TagRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new ContentRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance>()(work), - factory.GetInstance>()(work), - factory.GetInstance>()(work), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new ContentTypeRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance>()(work), - factory.GetInstance())); - container.Register((factory, work) => new DataTypeDefinitionRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance>()(work), - factory.GetInstance())); - container.Register((factory, work) => new DictionaryRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance>()(work), - factory.GetInstance())); - container.Register((factory, work) => new LanguageRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new MediaRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance>()(work), - factory.GetInstance>()(work), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new MediaTypeRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new RelationRepository( - work, - factory.GetInstance("DisabledCache"), //never cache - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance>()(work), - factory.GetInstance())); - container.Register((factory, work) => new RelationTypeRepository( - work, - factory.GetInstance("DisabledCache"), //never cache - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new ScriptRepository( + container.Register((factory, work) => new ScriptRepository( work, factory.GetInstance("ScriptFileSystem"), factory.GetInstance())); @@ -152,91 +129,7 @@ namespace Umbraco.Core.DependencyInjection serviceName: "PartialViewMacroRepository"); container.Register((factory, work) => new StylesheetRepository( work, - factory.GetInstance("StylesheetFileSystem"))); - container.Register((factory, work) => new TemplateRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance("MasterpageFileSystem"), - factory.GetInstance("ViewFileSystem"), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new MigrationEntryRepository( - work, - factory.GetInstance("DisabledCache"), //never cache - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new ServerRegistrationRepository( - work, - factory.GetInstance().StaticCache, //special static cache scenario - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new UserTypeRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new UserRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance>()(work), - factory.GetInstance())); - container.Register((factory, work) => new MacroRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new MemberRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance>()(work), - factory.GetInstance>()(work), - factory.GetInstance>()(work), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new MemberTypeRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new MemberGroupRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new EntityRepository( - work, - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new DomainRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new TaskTypeRepository( - work, - factory.GetInstance("DisabledCache"), //never cache - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance())); - container.Register((factory, work) => new EntityContainerRepository( - work, - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance())); + factory.GetInstance("StylesheetFileSystem"))); } /// diff --git a/src/Umbraco.Core/Persistence/Repositories/TagRepository.cs b/src/Umbraco.Core/Persistence/Repositories/TagRepository.cs index a62d98fa1f..add3f21729 100644 --- a/src/Umbraco.Core/Persistence/Repositories/TagRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/TagRepository.cs @@ -17,7 +17,7 @@ namespace Umbraco.Core.Persistence.Repositories { internal class TagRepository : PetaPocoRepositoryBase, ITagRepository { - internal TagRepository(IDatabaseUnitOfWork work, CacheHelper cache, ILogger logger, ISqlSyntaxProvider sqlSyntax, IMappingResolver mappingResolver) + public TagRepository(IDatabaseUnitOfWork work, CacheHelper cache, ILogger logger, ISqlSyntaxProvider sqlSyntax, IMappingResolver mappingResolver) : base(work, cache, logger, sqlSyntax, mappingResolver) { } diff --git a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs index 65b0e87201..c1ec5aab19 100644 --- a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs @@ -35,7 +35,7 @@ namespace Umbraco.Core.Persistence.Repositories private readonly MasterPageHelper _masterPageHelper; private readonly RepositoryCacheOptions _cacheOptions; - internal TemplateRepository(IDatabaseUnitOfWork work, CacheHelper cache, ILogger logger, ISqlSyntaxProvider sqlSyntax, IFileSystem masterpageFileSystem, IFileSystem viewFileSystem, ITemplatesSection templateConfig, IMappingResolver mappingResolver) + public TemplateRepository(IDatabaseUnitOfWork work, CacheHelper cache, ILogger logger, ISqlSyntaxProvider sqlSyntax, IFileSystem masterpageFileSystem, IFileSystem viewFileSystem, ITemplatesSection templateConfig, IMappingResolver mappingResolver) : base(work, cache, logger, sqlSyntax, mappingResolver) { _masterpagesFileSystem = masterpageFileSystem; diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 36dba43e90..f64aaa16aa 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -52,8 +52,8 @@ ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll - - ..\packages\LightInject.4.0.2\lib\net45\LightInject.dll + + ..\packages\LightInject.4.0.3\lib\net45\LightInject.dll True diff --git a/src/Umbraco.Core/packages.config b/src/Umbraco.Core/packages.config index 939b516ebf..ff5498e20c 100644 --- a/src/Umbraco.Core/packages.config +++ b/src/Umbraco.Core/packages.config @@ -2,7 +2,7 @@ - + diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index f73f90085a..9d0f9cd1f0 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -67,8 +67,8 @@ False ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll - - ..\packages\LightInject.4.0.2\lib\net45\LightInject.dll + + ..\packages\LightInject.4.0.3\lib\net45\LightInject.dll True diff --git a/src/Umbraco.Tests/packages.config b/src/Umbraco.Tests/packages.config index 90623bff26..76052f7e0e 100644 --- a/src/Umbraco.Tests/packages.config +++ b/src/Umbraco.Tests/packages.config @@ -3,7 +3,7 @@ - + diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 327d7b4c92..0e4c0d87ef 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -128,8 +128,8 @@ False ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll - - ..\packages\LightInject.4.0.2\lib\net45\LightInject.dll + + ..\packages\LightInject.4.0.3\lib\net45\LightInject.dll True diff --git a/src/Umbraco.Web/packages.config b/src/Umbraco.Web/packages.config index 48b6aa4cd0..1870bf0be8 100644 --- a/src/Umbraco.Web/packages.config +++ b/src/Umbraco.Web/packages.config @@ -5,7 +5,7 @@ - +