From cc396c8b960780bdb413dbf7180e788304659a16 Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 13 Jan 2015 18:19:52 +1100 Subject: [PATCH] Removes more unecessary singletons and simplifies/refactors some internal parts like the ctors for the ServiceContext, DatabaseContext. No more RepositoryResolver or SqlSyntaxProvidersResolver these are entirely uncessary and complicate things. --- src/Umbraco.Core/CoreBootManager.cs | 24 ++-- src/Umbraco.Core/DatabaseContext.cs | 49 ++++++- .../Repositories/ContentRepository.cs | 4 +- .../Repositories/UserRepository.cs | 4 +- .../Persistence/RepositoryFactory.cs | 11 +- .../Persistence/RepositoryResolver.cs | 63 --------- ...idersResolver.cs => SqlSyntaxProviders.cs} | 112 ++++++++-------- src/Umbraco.Core/Services/MediaService.cs | 2 + src/Umbraco.Core/Services/ServiceContext.cs | 55 ++++---- .../Standalone/ServiceContextManager.cs | 9 +- src/Umbraco.Core/Umbraco.Core.csproj | 2 +- .../BootManagers/CoreBootManagerTests.cs | 20 +-- .../Upgrades/ValidateV7TagsUpgradeTest.cs | 2 +- src/Umbraco.Tests/MockTests.cs | 4 +- .../Persistence/BaseTableByTableTest.cs | 16 +-- .../Persistence/DatabaseContextTests.cs | 10 +- .../Repositories/ContentRepositoryTest.cs | 50 +------ .../Repositories/ContentTypeRepositoryTest.cs | 15 +-- .../DataTypeDefinitionRepositoryTest.cs | 14 +- .../Repositories/DictionaryRepositoryTest.cs | 13 -- .../Repositories/LanguageRepositoryTest.cs | 14 +- .../Repositories/MediaRepositoryTest.cs | 16 +-- .../Repositories/MediaTypeRepositoryTest.cs | 14 -- .../Repositories/MemberRepositoryTest.cs | 13 -- .../Repositories/MemberTypeRepositoryTest.cs | 14 -- .../Repositories/RelationRepositoryTest.cs | 14 -- .../RelationTypeRepositoryTest.cs | 13 -- .../Repositories/TagRepositoryTest.cs | 16 +-- .../Repositories/TemplateRepositoryTest.cs | 19 +-- .../Repositories/UserRepositoryTest.cs | 67 +++++----- .../Repositories/UserTypeRepositoryTest.cs | 29 ++--- .../Persistence/RepositoryResolverTests.cs | 102 --------------- .../Services/ContentServicePerformanceTest.cs | 123 +++++++++++------- .../Services/ContentServiceTests.cs | 82 ++++++------ .../Services/MediaServiceTests.cs | 6 +- .../Services/MemberServiceTests.cs | 4 +- .../Services/ThreadSafetyServiceTest.cs | 28 +++- .../TestHelpers/BaseDatabaseFactoryTest.cs | 55 ++++---- .../TestHelpers/BaseDatabaseTest.cs | 19 +-- .../TestHelpers/BaseUmbracoApplicationTest.cs | 29 +++-- .../Standalone/ServiceContextManager.cs | 9 +- 41 files changed, 424 insertions(+), 741 deletions(-) delete mode 100644 src/Umbraco.Core/Persistence/RepositoryResolver.cs rename src/Umbraco.Core/Persistence/SqlSyntax/{SqlSyntaxProvidersResolver.cs => SqlSyntaxProviders.cs} (53%) delete mode 100644 src/Umbraco.Tests/Persistence/RepositoryResolverTests.cs diff --git a/src/Umbraco.Core/CoreBootManager.cs b/src/Umbraco.Core/CoreBootManager.cs index 88fc87d8b5..f7e2551687 100644 --- a/src/Umbraco.Core/CoreBootManager.cs +++ b/src/Umbraco.Core/CoreBootManager.cs @@ -75,8 +75,17 @@ namespace Umbraco.Core //create database and service contexts for the app context var dbFactory = new DefaultDatabaseFactory(GlobalSettings.UmbracoConnectionName, LoggerResolver.Current.Logger); Database.Mapper = new PetaPocoMapper(); - var dbContext = new DatabaseContext(dbFactory, LoggerResolver.Current.Logger); + + var dbContext = new DatabaseContext( + dbFactory, + LoggerResolver.Current.Logger, + SqlSyntaxProviders.CreateDefault(LoggerResolver.Current.Logger)); + + //initialize the DatabaseContext + dbContext.Initialize(); + var serviceContext = new ServiceContext( + new RepositoryFactory(ApplicationCache, LoggerResolver.Current.Logger, dbContext.SqlSyntax, UmbracoConfig.For.UmbracoSettings()), new PetaPocoUnitOfWorkProvider(dbFactory), new FileUnitOfWorkProvider(), new PublishingStrategy(), @@ -89,8 +98,7 @@ namespace Umbraco.Core InitializeResolvers(); - //initialize the DatabaseContext - dbContext.Initialize(); + InitializeModelMappers(); @@ -300,14 +308,10 @@ namespace Umbraco.Core MappingResolver.Current = new MappingResolver( () => PluginManager.Current.ResolveAssignedMapperTypes()); - RepositoryResolver.Current = new RepositoryResolver( - new RepositoryFactory(ApplicationCache)); + - SqlSyntaxProvidersResolver.Current = new SqlSyntaxProvidersResolver( - new[] { typeof(MySqlSyntaxProvider), typeof(SqlCeSyntaxProvider), typeof(SqlServerSyntaxProvider) }) - { - CanResolveBeforeFrozen = true - }; + //RepositoryResolver.Current = new RepositoryResolver( + // new RepositoryFactory(ApplicationCache)); CacheRefreshersResolver.Current = new CacheRefreshersResolver( () => PluginManager.Current.ResolveCacheRefreshers()); diff --git a/src/Umbraco.Core/DatabaseContext.cs b/src/Umbraco.Core/DatabaseContext.cs index f12ccf84bb..53ea6bda7e 100644 --- a/src/Umbraco.Core/DatabaseContext.cs +++ b/src/Umbraco.Core/DatabaseContext.cs @@ -24,10 +24,9 @@ namespace Umbraco.Core /// public class DatabaseContext { - - private readonly IDatabaseFactory _factory; private readonly ILogger _logger; + private readonly SqlSyntaxProviders _syntaxProviders; private bool _configured; private bool _canConnect; private volatile bool _connectCheck = false; @@ -38,22 +37,47 @@ namespace Umbraco.Core [Obsolete("Use the constructor specifying all dependencies instead")] public DatabaseContext(IDatabaseFactory factory) - : this(factory, LoggerResolver.Current.Logger, SqlSyntaxContext.SqlSyntaxProvider) + : this(factory, LoggerResolver.Current.Logger, new SqlSyntaxProviders(new ISqlSyntaxProvider[] + { + new MySqlSyntaxProvider(LoggerResolver.Current.Logger), + new SqlCeSyntaxProvider(), + new SqlServerSyntaxProvider() + })) { } - public DatabaseContext(IDatabaseFactory factory, ILogger logger) - { + /// + /// Default constructor + /// + /// + /// + /// + public DatabaseContext(IDatabaseFactory factory, ILogger logger, SqlSyntaxProviders syntaxProviders) + { + if (factory == null) throw new ArgumentNullException("factory"); + if (logger == null) throw new ArgumentNullException("logger"); + if (syntaxProviders == null) throw new ArgumentNullException("syntaxProviders"); + _factory = factory; _logger = logger; + _syntaxProviders = syntaxProviders; } - public DatabaseContext(IDatabaseFactory factory, ILogger logger, ISqlSyntaxProvider sqlSyntax) + /// + /// Create a configured DatabaseContext + /// + /// + /// + /// + /// + public DatabaseContext(IDatabaseFactory factory, ILogger logger, ISqlSyntaxProvider sqlSyntax, string providerName) { + _providerName = providerName; SqlSyntax = sqlSyntax; SqlSyntaxContext.SqlSyntaxProvider = SqlSyntax; _factory = factory; _logger = logger; + _configured = true; } public ISqlSyntaxProvider SqlSyntax { get; private set; } @@ -418,11 +442,22 @@ namespace Umbraco.Core internal void Initialize(string providerName) { + //only configure once! + if (_configured == true) return; + _providerName = providerName; try { - SqlSyntax = SqlSyntaxProvidersResolver.Current.GetByProviderNameOrDefault(providerName); + if (_syntaxProviders != null) + { + SqlSyntax = _syntaxProviders.GetByProviderNameOrDefault(providerName); + } + else if (SqlSyntax == null) + { + throw new InvalidOperationException("No " + typeof(ISqlSyntaxProvider) + " specified or no " + typeof(SqlSyntaxProviders) + " instance specified"); + } + SqlSyntaxContext.SqlSyntaxProvider = SqlSyntax; _configured = true; diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs index a1a476e49a..48340f0803 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs @@ -37,8 +37,8 @@ namespace Umbraco.Core.Persistence.Repositories private readonly ContentPreviewRepository _contentPreviewRepository; private readonly ContentXmlRepository _contentXmlRepository; - public ContentRepository(IDatabaseUnitOfWork work, CacheHelper cache, ILogger logger, IContentTypeRepository contentTypeRepository, ITemplateRepository templateRepository, ITagRepository tagRepository, CacheHelper cacheHelper) - : base(work, cache, logger) + public ContentRepository(IDatabaseUnitOfWork work, CacheHelper cacheHelper, ILogger logger, IContentTypeRepository contentTypeRepository, ITemplateRepository templateRepository, ITagRepository tagRepository) + : base(work, cacheHelper, logger) { if (contentTypeRepository == null) throw new ArgumentNullException("contentTypeRepository"); if (templateRepository == null) throw new ArgumentNullException("templateRepository"); diff --git a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs index d935f32a1f..70e08edb04 100644 --- a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs @@ -26,8 +26,8 @@ namespace Umbraco.Core.Persistence.Repositories private readonly IUserTypeRepository _userTypeRepository; private readonly CacheHelper _cacheHelper; - public UserRepository(IDatabaseUnitOfWork work, CacheHelper cache, ILogger logger, IUserTypeRepository userTypeRepository, CacheHelper cacheHelper) - : base(work, cache, logger) + public UserRepository(IDatabaseUnitOfWork work, CacheHelper cacheHelper, ILogger logger, IUserTypeRepository userTypeRepository) + : base(work, cacheHelper, logger) { _userTypeRepository = userTypeRepository; _cacheHelper = cacheHelper; diff --git a/src/Umbraco.Core/Persistence/RepositoryFactory.cs b/src/Umbraco.Core/Persistence/RepositoryFactory.cs index e82c07fba5..c609505449 100644 --- a/src/Umbraco.Core/Persistence/RepositoryFactory.cs +++ b/src/Umbraco.Core/Persistence/RepositoryFactory.cs @@ -79,8 +79,10 @@ namespace Umbraco.Core.Persistence _logger, CreateContentTypeRepository(uow), CreateTemplateRepository(uow), - CreateTagRepository(uow), - _cacheHelper) { EnsureUniqueNaming = _settings.Content.EnsureUniqueNaming }; + CreateTagRepository(uow)) + { + EnsureUniqueNaming = _settings.Content.EnsureUniqueNaming + }; } public virtual IContentTypeRepository CreateContentTypeRepository(IDatabaseUnitOfWork uow) @@ -172,7 +174,7 @@ namespace Umbraco.Core.Persistence public virtual IStylesheetRepository CreateStylesheetRepository(IUnitOfWork uow, IDatabaseUnitOfWork db) { - return new StylesheetRepository(uow, db); + return new StylesheetRepository(uow, db, new PhysicalFileSystem(SystemDirectories.Css)); } public virtual ITemplateRepository CreateTemplateRepository(IDatabaseUnitOfWork uow) @@ -209,8 +211,7 @@ namespace Umbraco.Core.Persistence //Need to cache users - we look up user information more than anything in the back office! _cacheHelper, _logger, - CreateUserTypeRepository(uow), - _cacheHelper); + CreateUserTypeRepository(uow)); } internal virtual IMacroRepository CreateMacroRepository(IDatabaseUnitOfWork uow) diff --git a/src/Umbraco.Core/Persistence/RepositoryResolver.cs b/src/Umbraco.Core/Persistence/RepositoryResolver.cs deleted file mode 100644 index 558a3aaee7..0000000000 --- a/src/Umbraco.Core/Persistence/RepositoryResolver.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using System.Linq; -using System.Reflection; -using Umbraco.Core.ObjectResolution; -using Umbraco.Core.Persistence.Repositories; -using Umbraco.Core.Persistence.UnitOfWork; - -namespace Umbraco.Core.Persistence -{ - /// - /// A resolver used to return the current implementation of the RepositoryInstanceFactory - /// - internal class RepositoryResolver : SingleObjectResolverBase - { - internal RepositoryResolver(RepositoryFactory registrar) - : base(registrar) - { - } - - /// - /// Can be used by developers at runtime to set their own RepositoryInstanceFactory at app startup - /// - /// - public void SetRepositoryInstanceFactory(RepositoryFactory factory) - { - Value = factory; - } - - /// - /// Returns the RepositoryInstanceFactory object - /// - internal RepositoryFactory Factory - { - get { return Value; } - } - - /// - /// Return the repository based on the type - /// - /// - /// - /// - internal TRepository ResolveByType(IUnitOfWork unitOfWork) - where TRepository : class, IRepository - { - var createMethod = this.Value.GetType().GetMethods(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public) - .First(x => x.Name == "Create" + typeof (TRepository).Name.Substring(1)); - - if (createMethod.GetParameters().Count() != 1 - || !createMethod.GetParameters().Single().ParameterType.IsType()) - { - throw new FormatException("The method " + createMethod.Name + " must only contain one parameter of type " + typeof(IUnitOfWork).FullName); - } - if (!createMethod.ReturnType.IsType()) - { - throw new FormatException("The method " + createMethod.Name + " must return the type " + typeof(TRepository).FullName); - } - - return (TRepository) createMethod.Invoke(this.Value, new object[] {unitOfWork}); - } - - } -} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProvidersResolver.cs b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviders.cs similarity index 53% rename from src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProvidersResolver.cs rename to src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviders.cs index 1ba9edca73..9f3d337d67 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProvidersResolver.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviders.cs @@ -1,56 +1,58 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Umbraco.Core.ObjectResolution; - -namespace Umbraco.Core.Persistence.SqlSyntax -{ - /// - /// A resolver to return all ISqlSyntaxProvider objects - /// - [Obsolete("This should really not be used, instead ISqlSyntaxProvider should be ctor injected into any service that needs it")] - internal sealed class SqlSyntaxProvidersResolver : ManyObjectsResolverBase - { - /// - /// Constructor - /// - /// - internal SqlSyntaxProvidersResolver(IEnumerable syntaxProviders) - : base(syntaxProviders) - { - - } - - /// - /// Gets the implementations. - /// - public IEnumerable SqlSyntaxProviders - { - get - { - return Values; - } - } - - /// - /// Gets a by its attributed provider. - /// - /// ProviderName from the ConnectionString settings - /// that corresponds to the attributed provider or the default Sql Server Syntax Provider. - public ISqlSyntaxProvider GetByProviderNameOrDefault(string providerName) - { - var provider = - Values.FirstOrDefault( - x => - x.GetType() - .FirstAttribute() - .ProviderName.ToLowerInvariant() - .Equals(providerName.ToLowerInvariant())); - - if (provider != null) - return provider; - - return Values.First(x => x.GetType() == typeof (SqlServerSyntaxProvider)); - } - } +using System; +using System.Collections.Generic; +using System.Linq; +using Umbraco.Core.Logging; +using Umbraco.Core.ObjectResolution; + +namespace Umbraco.Core.Persistence.SqlSyntax +{ + /// + /// Used to return the correct syntax provider for a given provider name + /// + public sealed class SqlSyntaxProviders + { + private readonly IEnumerable _syntaxProviders; + + internal static SqlSyntaxProviders CreateDefault(ILogger logger) + { + return new SqlSyntaxProviders(new ISqlSyntaxProvider[] + { + new MySqlSyntaxProvider(logger), + new SqlCeSyntaxProvider(), + new SqlServerSyntaxProvider() + }); + } + + /// + /// Constructor + /// + /// + public SqlSyntaxProviders(IEnumerable syntaxProviders) + { + if (syntaxProviders == null) throw new ArgumentNullException("syntaxProviders"); + _syntaxProviders = syntaxProviders; + } + + /// + /// Gets a by its attributed provider. + /// + /// ProviderName from the ConnectionString settings + /// that corresponds to the attributed provider or the default Sql Server Syntax Provider. + public ISqlSyntaxProvider GetByProviderNameOrDefault(string providerName) + { + var provider = + _syntaxProviders.FirstOrDefault( + x => + x.GetType() + .FirstAttribute() + .ProviderName.ToLowerInvariant() + .Equals(providerName.ToLowerInvariant())); + + if (provider != null) + return provider; + + //default + return _syntaxProviders.First(x => x.GetType() == typeof(SqlServerSyntaxProvider)); + } + } } \ No newline at end of file diff --git a/src/Umbraco.Core/Services/MediaService.cs b/src/Umbraco.Core/Services/MediaService.cs index 641a07b4ae..e8a547897a 100644 --- a/src/Umbraco.Core/Services/MediaService.cs +++ b/src/Umbraco.Core/Services/MediaService.cs @@ -1115,6 +1115,8 @@ namespace Umbraco.Core.Services private IMediaType FindMediaTypeByAlias(string mediaTypeAlias) { + Mandate.ParameterNotNullOrEmpty(mediaTypeAlias, "mediaTypeAlias"); + var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateMediaTypeRepository(uow)) { diff --git a/src/Umbraco.Core/Services/ServiceContext.cs b/src/Umbraco.Core/Services/ServiceContext.cs index be3259f0ff..e01471e3a7 100644 --- a/src/Umbraco.Core/Services/ServiceContext.cs +++ b/src/Umbraco.Core/Services/ServiceContext.cs @@ -98,19 +98,16 @@ namespace Umbraco.Core.Services _notificationService = new Lazy(() => notificationService); } - /// - /// Constructor used to instantiate the core services - /// - /// - /// - /// - /// - internal ServiceContext(IDatabaseUnitOfWorkProvider dbUnitOfWorkProvider, IUnitOfWorkProvider fileUnitOfWorkProvider, BasePublishingStrategy publishingStrategy, CacheHelper cache, ILogger logger) + internal ServiceContext( + RepositoryFactory repositoryFactory, + IDatabaseUnitOfWorkProvider dbUnitOfWorkProvider, + IUnitOfWorkProvider fileUnitOfWorkProvider, + BasePublishingStrategy publishingStrategy, + CacheHelper cache, + ILogger logger) { - BuildServiceCache(dbUnitOfWorkProvider, fileUnitOfWorkProvider, publishingStrategy, cache, - //this needs to be lazy because when we create the service context it's generally before the - //resolvers have been initialized! - new Lazy(() => RepositoryResolver.Current.Factory), + BuildServiceCache(dbUnitOfWorkProvider, fileUnitOfWorkProvider, publishingStrategy, cache, + repositoryFactory, logger); } @@ -122,7 +119,7 @@ namespace Umbraco.Core.Services IUnitOfWorkProvider fileUnitOfWorkProvider, BasePublishingStrategy publishingStrategy, CacheHelper cache, - Lazy repositoryFactory, + RepositoryFactory repositoryFactory, ILogger logger) { var provider = dbUnitOfWorkProvider; @@ -137,42 +134,42 @@ namespace Umbraco.Core.Services _notificationService = new Lazy(() => new NotificationService(provider, _userService.Value, _contentService.Value, logger)); if (_serverRegistrationService == null) - _serverRegistrationService = new Lazy(() => new ServerRegistrationService(provider, repositoryFactory.Value)); + _serverRegistrationService = new Lazy(() => new ServerRegistrationService(provider, repositoryFactory)); if (_userService == null) - _userService = new Lazy(() => new UserService(provider, repositoryFactory.Value)); + _userService = new Lazy(() => new UserService(provider, repositoryFactory)); if (_memberService == null) - _memberService = new Lazy(() => new MemberService(provider, repositoryFactory.Value, _memberGroupService.Value, _dataTypeService.Value)); + _memberService = new Lazy(() => new MemberService(provider, repositoryFactory, _memberGroupService.Value, _dataTypeService.Value)); if (_contentService == null) - _contentService = new Lazy(() => new ContentService(logger, provider, repositoryFactory.Value, publishingStrategy, _dataTypeService.Value, _userService.Value)); + _contentService = new Lazy(() => new ContentService(logger, provider, repositoryFactory, publishingStrategy, _dataTypeService.Value, _userService.Value)); if (_mediaService == null) - _mediaService = new Lazy(() => new MediaService(provider, repositoryFactory.Value, _dataTypeService.Value, _userService.Value)); + _mediaService = new Lazy(() => new MediaService(provider, repositoryFactory, _dataTypeService.Value, _userService.Value)); if (_contentTypeService == null) - _contentTypeService = new Lazy(() => new ContentTypeService(logger, provider, repositoryFactory.Value, _contentService.Value, _mediaService.Value)); + _contentTypeService = new Lazy(() => new ContentTypeService(logger, provider, repositoryFactory, _contentService.Value, _mediaService.Value)); if (_dataTypeService == null) - _dataTypeService = new Lazy(() => new DataTypeService(provider, repositoryFactory.Value)); + _dataTypeService = new Lazy(() => new DataTypeService(provider, repositoryFactory)); if (_fileService == null) - _fileService = new Lazy(() => new FileService(fileProvider, provider, repositoryFactory.Value)); + _fileService = new Lazy(() => new FileService(fileProvider, provider, repositoryFactory)); if (_localizationService == null) - _localizationService = new Lazy(() => new LocalizationService(provider, repositoryFactory.Value)); + _localizationService = new Lazy(() => new LocalizationService(provider, repositoryFactory)); if (_packagingService == null) - _packagingService = new Lazy(() => new PackagingService(logger, _contentService.Value, _contentTypeService.Value, _mediaService.Value, _macroService.Value, _dataTypeService.Value, _fileService.Value, _localizationService.Value, _userService.Value, repositoryFactory.Value, provider)); + _packagingService = new Lazy(() => new PackagingService(logger, _contentService.Value, _contentTypeService.Value, _mediaService.Value, _macroService.Value, _dataTypeService.Value, _fileService.Value, _localizationService.Value, _userService.Value, repositoryFactory, provider)); if (_entityService == null) _entityService = new Lazy(() => new EntityService( - provider, repositoryFactory.Value, + provider, repositoryFactory, _contentService.Value, _contentTypeService.Value, _mediaService.Value, _dataTypeService.Value, _memberService.Value, _memberTypeService.Value)); if (_relationService == null) - _relationService = new Lazy(() => new RelationService(provider, repositoryFactory.Value, _entityService.Value)); + _relationService = new Lazy(() => new RelationService(provider, repositoryFactory, _entityService.Value)); if (_treeService == null) _treeService = new Lazy(() => new ApplicationTreeService(logger, cache)); @@ -181,16 +178,16 @@ namespace Umbraco.Core.Services _sectionService = new Lazy(() => new SectionService(_userService.Value, _treeService.Value, provider, cache)); if (_macroService == null) - _macroService = new Lazy(() => new MacroService(provider, repositoryFactory.Value)); + _macroService = new Lazy(() => new MacroService(provider, repositoryFactory)); if (_memberTypeService == null) - _memberTypeService = new Lazy(() => new MemberTypeService(provider, repositoryFactory.Value, _memberService.Value)); + _memberTypeService = new Lazy(() => new MemberTypeService(provider, repositoryFactory, _memberService.Value)); if (_tagService == null) - _tagService = new Lazy(() => new TagService(provider, repositoryFactory.Value)); + _tagService = new Lazy(() => new TagService(provider, repositoryFactory)); if (_memberGroupService == null) - _memberGroupService = new Lazy(() => new MemberGroupService(provider, repositoryFactory.Value)); + _memberGroupService = new Lazy(() => new MemberGroupService(provider, repositoryFactory)); } diff --git a/src/Umbraco.Core/Standalone/ServiceContextManager.cs b/src/Umbraco.Core/Standalone/ServiceContextManager.cs index b7ac0d2862..b036359dc6 100644 --- a/src/Umbraco.Core/Standalone/ServiceContextManager.cs +++ b/src/Umbraco.Core/Standalone/ServiceContextManager.cs @@ -1,9 +1,11 @@ using System; using System.Diagnostics; using Umbraco.Core.Cache; +using Umbraco.Core.Configuration; using Umbraco.Core.Logging; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Mappers; +using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Persistence.UnitOfWork; using Umbraco.Core.Publishing; using Umbraco.Core.Services; @@ -15,14 +17,16 @@ namespace Umbraco.Core.Standalone private readonly string _connectionString; private readonly string _providerName; private readonly ILogger _logger; + private readonly ISqlSyntaxProvider _syntaxProvider; private ServiceContext _serviceContext; private readonly StandaloneCoreApplication _application; - public ServiceContextManager(string connectionString, string providerName, string baseDirectory, ILogger logger) + public ServiceContextManager(string connectionString, string providerName, string baseDirectory, ILogger logger, ISqlSyntaxProvider syntaxProvider) { _connectionString = connectionString; _providerName = providerName; _logger = logger; + _syntaxProvider = syntaxProvider; Trace.WriteLine("ServiceContextManager-Current AppDomain: " + AppDomain.CurrentDomain.FriendlyName); Trace.WriteLine("ServiceContextManager-Current AppDomain: " + AppDomain.CurrentDomain.BaseDirectory); @@ -56,9 +60,10 @@ namespace Umbraco.Core.Standalone new NullCacheProvider()); var dbFactory = new DefaultDatabaseFactory(_connectionString, _providerName, _logger); - var dbContext = new DatabaseContext(dbFactory, _logger); + var dbContext = new DatabaseContext(dbFactory, _logger, _syntaxProvider, _providerName); Database.Mapper = new PetaPocoMapper(); _serviceContext = new ServiceContext( + new RepositoryFactory(cacheHelper, _logger, dbContext.SqlSyntax, UmbracoConfig.For.UmbracoSettings()), new PetaPocoUnitOfWorkProvider(dbFactory), new FileUnitOfWorkProvider(), new PublishingStrategy(), diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index dcade72684..f6b1a9fb48 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -856,7 +856,7 @@ - + diff --git a/src/Umbraco.Tests/BootManagers/CoreBootManagerTests.cs b/src/Umbraco.Tests/BootManagers/CoreBootManagerTests.cs index 6a83caf407..a21e15dc38 100644 --- a/src/Umbraco.Tests/BootManagers/CoreBootManagerTests.cs +++ b/src/Umbraco.Tests/BootManagers/CoreBootManagerTests.cs @@ -5,6 +5,7 @@ using System.Text; using System.Web; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Configuration; using Umbraco.Core.ObjectResolution; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Tests.TestHelpers; @@ -22,7 +23,7 @@ namespace Umbraco.Tests.BootManagers public override void Initialize() { base.Initialize(); - _testApp = new TestApp(); + _testApp = new TestApp(); } [TearDown] @@ -30,10 +31,7 @@ namespace Umbraco.Tests.BootManagers { base.TearDown(); - _testApp = null; - - //ApplicationEventsResolver.Reset(); - //SqlSyntaxProvidersResolver.Reset(); + _testApp = null; } protected override void FreezeResolution() @@ -74,17 +72,7 @@ namespace Umbraco.Tests.BootManagers CanResolveBeforeFrozen = true }; } - - protected override void InitializeResolvers() - { - //Do nothing as we don't want to initialize all resolvers in this test - //We only include this resolver to not cause trouble for the database context - SqlSyntaxProvidersResolver.Current = new SqlSyntaxProvidersResolver( - PluginManager.Current.ResolveSqlSyntaxProviders()) - { - CanResolveBeforeFrozen = true - }; - } + } /// diff --git a/src/Umbraco.Tests/Migrations/Upgrades/ValidateV7TagsUpgradeTest.cs b/src/Umbraco.Tests/Migrations/Upgrades/ValidateV7TagsUpgradeTest.cs index 26276181c4..44bc02d678 100644 --- a/src/Umbraco.Tests/Migrations/Upgrades/ValidateV7TagsUpgradeTest.cs +++ b/src/Umbraco.Tests/Migrations/Upgrades/ValidateV7TagsUpgradeTest.cs @@ -28,7 +28,7 @@ namespace Umbraco.Tests.Migrations.Upgrades var templateRepository = new TemplateRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()); var tagRepository = new TagRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of()); contentTypeRepository = new ContentTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), templateRepository); - var repository = new ContentRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), contentTypeRepository, templateRepository, tagRepository, CacheHelper.CreateDisabledCacheHelper()); + var repository = new ContentRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), contentTypeRepository, templateRepository, tagRepository); return repository; } diff --git a/src/Umbraco.Tests/MockTests.cs b/src/Umbraco.Tests/MockTests.cs index 2a64d5dbbb..4214bbcdb4 100644 --- a/src/Umbraco.Tests/MockTests.cs +++ b/src/Umbraco.Tests/MockTests.cs @@ -69,7 +69,7 @@ namespace Umbraco.Tests [Test] public void Can_Create_Db_Context() { - var dbCtx = new DatabaseContext(new Mock().Object, Mock.Of()); + var dbCtx = new DatabaseContext(new Mock().Object, Mock.Of(), Mock.Of(), "test"); Assert.Pass(); } @@ -77,7 +77,7 @@ namespace Umbraco.Tests public void Can_Create_App_Context_With_Services() { var appCtx = new ApplicationContext( - new DatabaseContext(new Mock().Object, Mock.Of()), + new DatabaseContext(new Mock().Object, Mock.Of(), Mock.Of(), "test"), new ServiceContext( new Mock().Object, new Mock().Object, diff --git a/src/Umbraco.Tests/Persistence/BaseTableByTableTest.cs b/src/Umbraco.Tests/Persistence/BaseTableByTableTest.cs index 968983adc3..f239ccb80e 100644 --- a/src/Umbraco.Tests/Persistence/BaseTableByTableTest.cs +++ b/src/Umbraco.Tests/Persistence/BaseTableByTableTest.cs @@ -44,24 +44,21 @@ namespace Umbraco.Tests.Persistence string path = TestHelper.CurrentAssemblyDirectory; AppDomain.CurrentDomain.SetData("DataDirectory", path); - RepositoryResolver.Current = new RepositoryResolver(new RepositoryFactory(CacheHelper.CreateDisabledCacheHelper(), - _logger, - new SqlCeSyntaxProvider(), - Mock.Of())); - //disable cache var cacheHelper = CacheHelper.CreateDisabledCacheHelper(); var dbContext = new DatabaseContext( - new DefaultDatabaseFactory(GlobalSettings.UmbracoConnectionName, _logger), - _logger, SqlSyntaxProvider); + new DefaultDatabaseFactory(GlobalSettings.UmbracoConnectionName, _logger), + _logger, SqlSyntaxProvider, "System.Data.SqlServerCe.4.0"); + + var repositoryFactory = new RepositoryFactory(cacheHelper, _logger, SqlSyntaxProvider, SettingsForTests.GenerateMockSettings()); ApplicationContext.Current = new ApplicationContext( //assign the db context dbContext, //assign the service context - new ServiceContext(new PetaPocoUnitOfWorkProvider(_logger), new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper, _logger), + new ServiceContext(repositoryFactory, new PetaPocoUnitOfWorkProvider(_logger), new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper, _logger), cacheHelper, new Logger(new FileInfo(TestHelper.MapPathForTest("~/unit-test-log4net.config")))) { @@ -79,7 +76,8 @@ namespace Umbraco.Tests.Persistence //reset the app context ApplicationContext.Current = null; - RepositoryResolver.Reset(); + Resolution.Reset(); + //RepositoryResolver.Reset(); } diff --git a/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs b/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs index 5ad1c27110..a1f6dd3b89 100644 --- a/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs +++ b/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs @@ -22,8 +22,8 @@ namespace Umbraco.Tests.Persistence public void Setup() { _dbContext = new DatabaseContext( - new DefaultDatabaseFactory(Core.Configuration.GlobalSettings.UmbracoConnectionName, Mock.Of()), - Mock.Of(), new SqlCeSyntaxProvider()); + new DefaultDatabaseFactory(Core.Configuration.GlobalSettings.UmbracoConnectionName, Mock.Of()), + Mock.Of(), new SqlCeSyntaxProvider(), "System.Data.SqlServerCe.4.0"); //unfortunately we have to set this up because the PetaPocoExtensions require singleton access ApplicationContext.Current = new ApplicationContext(CacheHelper.CreateDisabledCacheHelper()) @@ -80,11 +80,13 @@ namespace Umbraco.Tests.Persistence var engine = new SqlCeEngine(settings.ConnectionString.Replace("UmbracoPetaPocoTests", "DatabaseContextTests")); engine.CreateDatabase(); + var dbFactory = new DefaultDatabaseFactory(engine.LocalConnectionString, "System.Data.SqlServerCe.4.0", Mock.Of()); //re-map the dbcontext to the new conn string _dbContext = new DatabaseContext( - new DefaultDatabaseFactory(engine.LocalConnectionString, "System.Data.SqlServerCe.4.0", Mock.Of()), + dbFactory, Mock.Of(), - new SqlCeSyntaxProvider()); + new SqlCeSyntaxProvider(), + dbFactory.ProviderName); var schemaHelper = new DatabaseSchemaHelper(_dbContext.Database, Mock.Of(), new SqlCeSyntaxProvider()); diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs index 1382687c29..b9c884a4ff 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs @@ -47,7 +47,7 @@ namespace Umbraco.Tests.Persistence.Repositories var templateRepository = new TemplateRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()); var tagRepository = new TagRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of()); contentTypeRepository = new ContentTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), templateRepository); - var repository = new ContentRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), contentTypeRepository, templateRepository, tagRepository, CacheHelper.CreateDisabledCacheHelper()); + var repository = new ContentRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), contentTypeRepository, templateRepository, tagRepository); return repository; } @@ -202,20 +202,6 @@ namespace Umbraco.Tests.Persistence.Repositories } - [Test] - public void Can_Instantiate_Repository_From_Resolver() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - - // Assert - Assert.That(repository, Is.Not.Null); - } - [Test] public void Can_Perform_Add_On_ContentRepository() { @@ -304,35 +290,6 @@ namespace Umbraco.Tests.Persistence.Repositories } - [Test] - public void Can_Perform_Multiple_Adds_On_ContentRepository_With_RepositoryResolver() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - ContentTypeRepository contentTypeRepository; - using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) - { - ContentType contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage1", "Textpage"); - Content textpage = MockedContent.CreateSimpleContent(contentType); - - // Act - contentTypeRepository.AddOrUpdate(contentType); - repository.AddOrUpdate(textpage); - unitOfWork.Commit(); - - var repository2 = RepositoryResolver.Current.ResolveByType(unitOfWork); - Content subpage = MockedContent.CreateSimpleContent(contentType, "Text Page 1", textpage.Id); - repository2.AddOrUpdate(subpage); - unitOfWork.Commit(); - - // Assert - Assert.That(contentType.HasIdentity, Is.True); - Assert.That(textpage.HasIdentity, Is.True); - Assert.That(subpage.HasIdentity, Is.True); - Assert.That(textpage.Id, Is.EqualTo(subpage.ParentId)); - } - } [Test] public void Can_Verify_Fresh_Entity_Is_Not_Dirty() @@ -394,11 +351,10 @@ namespace Umbraco.Tests.Persistence.Repositories unitOfWork.Commit(); var id = content.Id; - var repository2 = RepositoryResolver.Current.ResolveByType(unitOfWork); - repository2.Delete(content); + repository.Delete(content); unitOfWork.Commit(); - var content1 = repository2.Get(id); + var content1 = repository.Get(id); // Assert Assert.That(content1, Is.Null); diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs index e5e9a0847b..1b4469f47e 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs @@ -42,7 +42,7 @@ namespace Umbraco.Tests.Persistence.Repositories var templateRepository = new TemplateRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()); var tagRepository = new TagRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of()); contentTypeRepository = new ContentTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), templateRepository); - var repository = new ContentRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), contentTypeRepository, templateRepository, tagRepository, CacheHelper.CreateDisabledCacheHelper()); + var repository = new ContentRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), contentTypeRepository, templateRepository, tagRepository); return repository; } @@ -55,19 +55,6 @@ namespace Umbraco.Tests.Persistence.Repositories //TODO Add test to verify SetDefaultTemplates updates both AllowedTemplates and DefaultTemplate(id). - [Test] - public void Can_Instantiate_Repository_From_Resolver() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - - // Assert - Assert.That(repository, Is.Not.Null); - } [Test] public void Maps_Templates_Correctly() diff --git a/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs index 81ea585c32..d6ab20f7b8 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs @@ -91,19 +91,7 @@ namespace Umbraco.Tests.Persistence.Repositories } } - [Test] - public void Can_Instantiate_Repository_From_Resolver() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - - // Assert - Assert.That(repository, Is.Not.Null); - } + [Test] public void Can_Perform_Get_On_DataTypeDefinitionRepository() diff --git a/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs index f6ca73c38b..a9b58fa38c 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs @@ -34,19 +34,6 @@ namespace Umbraco.Tests.Persistence.Repositories return dictionaryRepository; } - [Test] - public void Can_Instantiate_Repository_From_Resolver() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - - // Assert - Assert.That(repository, Is.Not.Null); - } [Test] public void Can_Perform_Get_By_Key_On_DictionaryRepository() diff --git a/src/Umbraco.Tests/Persistence/Repositories/LanguageRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/LanguageRepositoryTest.cs index b25b7ab4e4..ea0a25e803 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/LanguageRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/LanguageRepositoryTest.cs @@ -31,19 +31,7 @@ namespace Umbraco.Tests.Persistence.Repositories return new LanguageRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of()); } - [Test] - public void Can_Instantiate_Repository_From_Resolver() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - - // Assert - Assert.That(repository, Is.Not.Null); - } + [Test] public void Can_Perform_Get_On_LanguageRepository() diff --git a/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs index 0e2a259832..1c81bd29e7 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs @@ -113,21 +113,7 @@ namespace Umbraco.Tests.Persistence.Repositories Assert.AreEqual(62, unitOfWork.Database.ExecuteScalar("SELECT COUNT(*) FROM cmsContentXml")); } } - - [Test] - public void Can_Instantiate_Repository_From_Resolver() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - - // Assert - Assert.That(repository, Is.Not.Null); - } - + [Test] public void Can_Perform_Add_On_MediaRepository() { diff --git a/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs index 8f4d5b09be..d4643d4ab0 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs @@ -30,20 +30,6 @@ namespace Umbraco.Tests.Persistence.Repositories return new MediaTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of()); } - [Test] - public void Can_Instantiate_Repository_From_Resolver() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - - // Assert - Assert.That(repository, Is.Not.Null); - } - [Test] public void Can_Perform_Add_On_MediaTypeRepository() { diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs index a300b146a1..b8837491b5 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs @@ -112,19 +112,6 @@ namespace Umbraco.Tests.Persistence.Repositories } - [Test] - public void Can_Instantiate_Repository_From_Resolver() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - - // Assert - Assert.That(repository, Is.Not.Null); - } [Test] public void MemberRepository_Can_Get_Member_By_Id() diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs index 5b6eab9889..f2278a176a 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs @@ -35,20 +35,6 @@ namespace Umbraco.Tests.Persistence.Repositories return new MemberTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of()); } - [Test] - public void Can_Instantiate_Repository_From_Resolver() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - - // Assert - Assert.That(repository, Is.Not.Null); - } - [Test] public void Can_Persist_Member_Type() { diff --git a/src/Umbraco.Tests/Persistence/Repositories/RelationRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/RelationRepositoryTest.cs index 516db84d8c..119257430e 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/RelationRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/RelationRepositoryTest.cs @@ -37,20 +37,6 @@ namespace Umbraco.Tests.Persistence.Repositories return repository; } - [Test] - public void Can_Instantiate_Repository_From_Resolver() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - - // Assert - Assert.That(repository, Is.Not.Null); - } - [Test] public void Can_Perform_Add_On_RelationRepository() { diff --git a/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs index 60c69d1400..a8a7501f73 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs @@ -32,19 +32,6 @@ namespace Umbraco.Tests.Persistence.Repositories return new RelationTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of()); } - [Test] - public void Can_Instantiate_Repository_From_Resolver() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - - // Assert - Assert.That(repository, Is.Not.Null); - } [Test] public void Can_Perform_Add_On_RelationTypeRepository() diff --git a/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs index d3e7605586..d0bcccd19f 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs @@ -39,20 +39,6 @@ namespace Umbraco.Tests.Persistence.Repositories return tagRepository; } - [Test] - public void Can_Instantiate_Repository_From_Resolver() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - - // Assert - Assert.That(repository, Is.Not.Null); - } - [Test] public void Can_Perform_Add_On_Repository() { @@ -956,7 +942,7 @@ namespace Umbraco.Tests.Persistence.Repositories var templateRepository = new TemplateRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()); var tagRepository = new TagRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of()); contentTypeRepository = new ContentTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), templateRepository); - var repository = new ContentRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), contentTypeRepository, templateRepository, tagRepository, CacheHelper.CreateDisabledCacheHelper()); + var repository = new ContentRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), contentTypeRepository, templateRepository, tagRepository); return repository; } diff --git a/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs index 9d753eebed..34d7affea8 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs @@ -35,23 +35,6 @@ namespace Umbraco.Tests.Persistence.Repositories _viewsFileSystem = new PhysicalFileSystem(SystemDirectories.MvcViews); } - [Test] - public void Can_Instantiate_Repository_From_Resolver() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - using (var repository = RepositoryResolver.Current.ResolveByType(unitOfWork)) - { - - // Assert - Assert.That(repository, Is.Not.Null); - } - - } - [Test] public void Can_Instantiate_Repository() { @@ -433,7 +416,7 @@ namespace Umbraco.Tests.Persistence.Repositories { var tagRepository = new TagRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of()); var contentTypeRepository = new ContentTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), templateRepository); - var contentRepo = new ContentRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), contentTypeRepository, templateRepository, tagRepository, CacheHelper.CreateDisabledCacheHelper()); + var contentRepo = new ContentRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), contentTypeRepository, templateRepository, tagRepository); using (contentRepo) { diff --git a/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs index 378b0ae32d..117a6a6498 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs @@ -35,23 +35,10 @@ namespace Umbraco.Tests.Persistence.Repositories private UserRepository CreateRepository(IDatabaseUnitOfWork unitOfWork, out UserTypeRepository userTypeRepository) { userTypeRepository = new UserTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of()); - var repository = new UserRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), userTypeRepository, CacheHelper.CreateDisabledCacheHelper()); + var repository = new UserRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), userTypeRepository); return repository; } - [Test] - public void Can_Instantiate_Repository_From_Resolver() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - - // Assert - Assert.That(repository, Is.Not.Null); - } [Test] public void Can_Perform_Add_On_UserRepository() @@ -188,14 +175,17 @@ namespace Umbraco.Tests.Persistence.Repositories unitOfWork.Commit(); var id = user.Id; - var repository2 = RepositoryResolver.Current.ResolveByType(unitOfWork); - repository2.Delete(user); - unitOfWork.Commit(); + using (var utRepo = new UserTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger)) + using (var repository2 = new UserRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, utRepo)) + { + repository2.Delete(user); + unitOfWork.Commit(); - var resolved = repository2.Get((int)id); + var resolved = repository2.Get((int) id); - // Assert - Assert.That(resolved, Is.Null); + // Assert + Assert.That(resolved, Is.Null); + } } } @@ -493,20 +483,21 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(Logger); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - + using (var utRepo = new UserTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger)) + using (var repository = new UserRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, utRepo)) + { - // Act - var user1 = MockedUser.CreateUser(CreateAndCommitUserType(), "1", "test", "media"); - repository.AddOrUpdate(user1); - unitOfWork.Commit(); - - // Assert - Assert.AreEqual(3, user1.DefaultPermissions.Count()); - Assert.AreEqual("A", user1.DefaultPermissions.ElementAt(0)); - Assert.AreEqual("B", user1.DefaultPermissions.ElementAt(1)); - Assert.AreEqual("C", user1.DefaultPermissions.ElementAt(2)); + // Act + var user1 = MockedUser.CreateUser(CreateAndCommitUserType(), "1", "test", "media"); + repository.AddOrUpdate(user1); + unitOfWork.Commit(); + // Assert + Assert.AreEqual(3, user1.DefaultPermissions.Count()); + Assert.AreEqual("A", user1.DefaultPermissions.ElementAt(0)); + Assert.AreEqual("B", user1.DefaultPermissions.ElementAt(1)); + Assert.AreEqual("C", user1.DefaultPermissions.ElementAt(2)); + } } private void AssertPropertyValues(IUser updatedItem, IUser originalUser) @@ -543,11 +534,13 @@ namespace Umbraco.Tests.Persistence.Repositories { var provider = new PetaPocoUnitOfWorkProvider(Logger); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var userType = MockedUserType.CreateUserType(); - repository.AddOrUpdate(userType); - unitOfWork.Commit(); - return userType; + using (var repository = new UserTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger)) + { + var userType = MockedUserType.CreateUserType(); + repository.AddOrUpdate(userType); + unitOfWork.Commit(); + return userType; + } } } } \ No newline at end of file diff --git a/src/Umbraco.Tests/Persistence/Repositories/UserTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/UserTypeRepositoryTest.cs index d84b942ffc..3bb0d46ddc 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/UserTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/UserTypeRepositoryTest.cs @@ -35,20 +35,6 @@ namespace Umbraco.Tests.Persistence.Repositories return new UserTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of()); } - [Test] - public void Can_Instantiate_Repository_From_Resolver() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - - // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - - // Assert - Assert.That(repository, Is.Not.Null); - } - [Test] public void Can_Perform_Add_On_UserTypeRepository() { @@ -157,14 +143,17 @@ namespace Umbraco.Tests.Persistence.Repositories unitOfWork.Commit(); var id = userType.Id; - var repository2 = RepositoryResolver.Current.ResolveByType(unitOfWork); - repository2.Delete(userType); - unitOfWork.Commit(); + using (var repository2 = new UserTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger)) + { + repository2.Delete(userType); + unitOfWork.Commit(); - var resolved = repository2.Get(id); + var resolved = repository2.Get(id); - // Assert - Assert.That(resolved, Is.Null); + // Assert + Assert.That(resolved, Is.Null); + } + } } diff --git a/src/Umbraco.Tests/Persistence/RepositoryResolverTests.cs b/src/Umbraco.Tests/Persistence/RepositoryResolverTests.cs deleted file mode 100644 index be387cc339..0000000000 --- a/src/Umbraco.Tests/Persistence/RepositoryResolverTests.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Reflection; -using Moq; -using NUnit.Framework; -using Umbraco.Core; -using Umbraco.Core.Configuration.UmbracoSettings; -using Umbraco.Core.Logging; -using Umbraco.Core.Models; -using Umbraco.Core.Models.Membership; -using Umbraco.Core.ObjectResolution; -using Umbraco.Core.Persistence; -using Umbraco.Core.Persistence.Repositories; -using Umbraco.Core.Persistence.SqlSyntax; -using Umbraco.Core.Persistence.UnitOfWork; -using Umbraco.Tests.TestHelpers; - -namespace Umbraco.Tests.Persistence -{ - [TestFixture] - public class RepositoryResolverTests - { - - [SetUp] - public void Setup() - { - RepositoryResolver.Current = new RepositoryResolver( - new RepositoryFactory(CacheHelper.CreateDisabledCacheHelper(), //disable all repo caches for tests! - Mock.Of(), - new SqlCeSyntaxProvider(), - SettingsForTests.GenerateMockSettings())); - - Resolution.Freeze(); - } - - [TearDown] - public void Teardown() - { - RepositoryResolver.Reset(); - } - - //[TestCase(typeof(IUserTypeRepository))] - //[TestCase(typeof(IUserRepository))] - //[TestCase(typeof(IMacroRepository))] - [TestCase(typeof(IContentRepository))] - [TestCase(typeof(IMediaRepository))] - [TestCase(typeof(IMediaTypeRepository))] - [TestCase(typeof(IContentTypeRepository))] - [TestCase(typeof(IDataTypeDefinitionRepository))] - [TestCase(typeof(IDictionaryRepository))] - [TestCase(typeof(ILanguageRepository))] - [TestCase(typeof(IRelationRepository))] - [TestCase(typeof(IRelationTypeRepository))] - [TestCase(typeof(IScriptRepository))] - //[TestCase(typeof(IStylesheetRepository))] - [TestCase(typeof(ITemplateRepository))] - public void ResolveRepository(Type repoType) - { - var method = typeof(RepositoryResolver).GetMethod("ResolveByType", BindingFlags.NonPublic | BindingFlags.Instance); - var gMethod = method.MakeGenericMethod(repoType); - var repo = gMethod.Invoke(RepositoryResolver.Current, new object[] { PetaPocoUnitOfWorkProvider.CreateUnitOfWork(Mock.Of()) }); - Assert.IsNotNull(repo); - Assert.IsTrue(TypeHelper.IsTypeAssignableFrom(repoType, repo.GetType())); - repo.DisposeIfDisposable(); - } - - [Test] - public void Can_Verify_UOW_In_Repository() - { - // Arrange - var uow = PetaPocoUnitOfWorkProvider.CreateUnitOfWork(Mock.Of()); - - // Act - var repository = RepositoryResolver.Current.ResolveByType(uow); - - // Assert - Assert.That(repository, Is.Not.Null); - Assert.That(uow.Key, Is.EqualTo(((RepositoryBase)repository).UnitKey)); - - repository.Dispose(); - } - - [Test] - public void Type_Checking() - { - var repositoryType = typeof (IContentRepository); - bool isSubclassOf = repositoryType.IsSubclassOf(typeof(IRepository)); - bool isAssignableFrom = typeof(IRepository).IsAssignableFrom(repositoryType); - - Assert.That(isSubclassOf, Is.False); - Assert.That(isAssignableFrom, Is.True); - - var uow = PetaPocoUnitOfWorkProvider.CreateUnitOfWork(Mock.Of()); - var repository = RepositoryResolver.Current.ResolveByType(uow); - bool subclassOf = repository.GetType().IsSubclassOf(typeof (IRepository)); - - Assert.That(subclassOf, Is.False); - Assert.That((typeof(IRepository).IsInstanceOfType(repository)), Is.True); - - repository.Dispose(); - } - } -} \ No newline at end of file diff --git a/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs b/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs index 4a3bf208f6..e8989329f5 100644 --- a/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs +++ b/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs @@ -2,8 +2,11 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using Moq; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.Rdbms; @@ -49,10 +52,10 @@ namespace Umbraco.Tests.Services // ... NOPE, made even more nice changes, it is now... // 4452ms !!!!!!! - var contentType1 = MockedContentTypes.CreateTextpageContentType("test1", "test1"); + var contentType1 = MockedContentTypes.CreateTextpageContentType("test1", "test1"); var contentType2 = MockedContentTypes.CreateTextpageContentType("test2", "test2"); - var contentType3 = MockedContentTypes.CreateTextpageContentType("test3", "test3"); - ServiceContext.ContentTypeService.Save(new[] {contentType1, contentType2, contentType3}); + var contentType3 = MockedContentTypes.CreateTextpageContentType("test3", "test3"); + ServiceContext.ContentTypeService.Save(new[] { contentType1, contentType2, contentType3 }); contentType1.AllowedContentTypes = new[] { new ContentTypeSort(new Lazy(() => contentType2.Id), 0, contentType2.Alias), @@ -69,7 +72,7 @@ namespace Umbraco.Tests.Services new ContentTypeSort(new Lazy(() => contentType2.Id), 1, contentType2.Alias) }; ServiceContext.ContentTypeService.Save(new[] { contentType1, contentType2, contentType3 }); - + var roots = MockedContent.CreateTextpageContent(contentType1, -1, 10); ServiceContext.ContentService.Save(roots); foreach (var root in roots) @@ -144,19 +147,26 @@ namespace Umbraco.Tests.Services var provider = new PetaPocoUnitOfWorkProvider(Logger); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - // Act - Stopwatch watch = Stopwatch.StartNew(); - var contents = repository.GetAll(); - watch.Stop(); - var elapsed = watch.ElapsedMilliseconds; + using (var tRepository = new TemplateRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, Mock.Of(), Mock.Of(), Mock.Of())) + using (var tagRepo = new TagRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger)) + using (var ctRepository = new ContentTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, tRepository)) + using (var repository = new ContentRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, ctRepository, tRepository, tagRepo)) + { + // Act + Stopwatch watch = Stopwatch.StartNew(); + var contents = repository.GetAll(); + watch.Stop(); + var elapsed = watch.ElapsedMilliseconds; + + Console.WriteLine("100 content items retrieved in {0} ms without caching", elapsed); + + // Assert + Assert.That(contents.Any(x => x.HasIdentity == false), Is.False); + Assert.That(contents.Any(x => x == null), Is.False); + } - Console.WriteLine("100 content items retrieved in {0} ms without caching", elapsed); - // Assert - Assert.That(contents.Any(x => x.HasIdentity == false), Is.False); - Assert.That(contents.Any(x => x == null), Is.False); } [Test, NUnit.Framework.Ignore] @@ -169,19 +179,23 @@ namespace Umbraco.Tests.Services var provider = new PetaPocoUnitOfWorkProvider(Logger); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var tRepository = new TemplateRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, Mock.Of(), Mock.Of(), Mock.Of())) + using (var tagRepo = new TagRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger)) + using (var ctRepository = new ContentTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, tRepository)) + using (var repository = new ContentRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, ctRepository, tRepository, tagRepo)) + { + // Act + Stopwatch watch = Stopwatch.StartNew(); + var contents = repository.GetAll(); + watch.Stop(); + var elapsed = watch.ElapsedMilliseconds; - // Act - Stopwatch watch = Stopwatch.StartNew(); - var contents = repository.GetAll(); - watch.Stop(); - var elapsed = watch.ElapsedMilliseconds; + Console.WriteLine("1000 content items retrieved in {0} ms without caching", elapsed); - Console.WriteLine("1000 content items retrieved in {0} ms without caching", elapsed); - - // Assert - //Assert.That(contents.Any(x => x.HasIdentity == false), Is.False); - //Assert.That(contents.Any(x => x == null), Is.False); + // Assert + //Assert.That(contents.Any(x => x.HasIdentity == false), Is.False); + //Assert.That(contents.Any(x => x == null), Is.False); + } } [Test] @@ -194,22 +208,28 @@ namespace Umbraco.Tests.Services var provider = new PetaPocoUnitOfWorkProvider(Logger); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - // Act - var contents = repository.GetAll(); + using (var tRepository = new TemplateRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, Mock.Of(), Mock.Of(), Mock.Of())) + using (var tagRepo = new TagRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger)) + using (var ctRepository = new ContentTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, tRepository)) + using (var repository = new ContentRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, ctRepository, tRepository, tagRepo)) + { - Stopwatch watch = Stopwatch.StartNew(); - var contentsCached = repository.GetAll(); - watch.Stop(); - var elapsed = watch.ElapsedMilliseconds; + // Act + var contents = repository.GetAll(); - Console.WriteLine("100 content items retrieved in {0} ms with caching", elapsed); + Stopwatch watch = Stopwatch.StartNew(); + var contentsCached = repository.GetAll(); + watch.Stop(); + var elapsed = watch.ElapsedMilliseconds; - // Assert - Assert.That(contentsCached.Any(x => x.HasIdentity == false), Is.False); - Assert.That(contentsCached.Any(x => x == null), Is.False); - Assert.That(contentsCached.Count(), Is.EqualTo(contents.Count())); + Console.WriteLine("100 content items retrieved in {0} ms with caching", elapsed); + + // Assert + Assert.That(contentsCached.Any(x => x.HasIdentity == false), Is.False); + Assert.That(contentsCached.Any(x => x == null), Is.False); + Assert.That(contentsCached.Count(), Is.EqualTo(contents.Count())); + } } [Test, NUnit.Framework.Ignore] @@ -222,22 +242,27 @@ namespace Umbraco.Tests.Services var provider = new PetaPocoUnitOfWorkProvider(Logger); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var tRepository = new TemplateRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, Mock.Of(), Mock.Of(), Mock.Of())) + using (var tagRepo = new TagRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger)) + using (var ctRepository = new ContentTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, tRepository)) + using (var repository = new ContentRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Logger, ctRepository, tRepository, tagRepo)) + { - // Act - var contents = repository.GetAll(); + // Act + var contents = repository.GetAll(); - Stopwatch watch = Stopwatch.StartNew(); - var contentsCached = repository.GetAll(); - watch.Stop(); - var elapsed = watch.ElapsedMilliseconds; + Stopwatch watch = Stopwatch.StartNew(); + var contentsCached = repository.GetAll(); + watch.Stop(); + var elapsed = watch.ElapsedMilliseconds; - Console.WriteLine("1000 content items retrieved in {0} ms with caching", elapsed); + Console.WriteLine("1000 content items retrieved in {0} ms with caching", elapsed); - // Assert - //Assert.That(contentsCached.Any(x => x.HasIdentity == false), Is.False); - //Assert.That(contentsCached.Any(x => x == null), Is.False); - //Assert.That(contentsCached.Count(), Is.EqualTo(contents.Count())); + // Assert + //Assert.That(contentsCached.Any(x => x.HasIdentity == false), Is.False); + //Assert.That(contentsCached.Any(x => x == null), Is.False); + //Assert.That(contentsCached.Count(), Is.EqualTo(contents.Count())); + } } [TearDown] diff --git a/src/Umbraco.Tests/Services/ContentServiceTests.cs b/src/Umbraco.Tests/Services/ContentServiceTests.cs index f3247df26f..50e178dbe6 100644 --- a/src/Umbraco.Tests/Services/ContentServiceTests.cs +++ b/src/Umbraco.Tests/Services/ContentServiceTests.cs @@ -4,6 +4,9 @@ using System.Linq; using System.Threading; using Moq; using NUnit.Framework; +using Umbraco.Core; +using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.Membership; @@ -719,10 +722,7 @@ namespace Umbraco.Tests.Services var provider = new PetaPocoUnitOfWorkProvider(Logger); var uow = provider.GetUnitOfWork(); - using (RepositoryResolver.Current.ResolveByType(uow)) - { - Assert.IsTrue(uow.Database.Exists(content.Id)); - } + Assert.IsTrue(uow.Database.Exists(content.Id)); // Act bool unpublished = contentService.UnPublish(content, 0); @@ -733,10 +733,7 @@ namespace Umbraco.Tests.Services Assert.That(content.Published, Is.False); uow = provider.GetUnitOfWork(); - using (RepositoryResolver.Current.ResolveByType(uow)) - { - Assert.IsFalse(uow.Database.Exists(content.Id)); - } + Assert.IsFalse(uow.Database.Exists(content.Id)); } /// @@ -786,11 +783,12 @@ namespace Umbraco.Tests.Services var allContent = rootContent.Concat(rootContent.SelectMany(x => x.Descendants())); //for testing we need to clear out the contentXml table so we can see if it worked var provider = new PetaPocoUnitOfWorkProvider(Logger); - var uow = provider.GetUnitOfWork(); - using (RepositoryResolver.Current.ResolveByType(uow)) + using (var uow = provider.GetUnitOfWork()) { - uow.Database.TruncateTable("cmsContentXml"); + uow.Database.TruncateTable("cmsContentXml"); } + + //for this test we are also going to save a revision for a content item that is not published, this is to ensure //that it's published version still makes it into the cmsContentXml table! contentService.Save(allContent.Last()); @@ -800,10 +798,9 @@ namespace Umbraco.Tests.Services // Assert Assert.IsTrue(published); - uow = provider.GetUnitOfWork(); - using (var repo = RepositoryResolver.Current.ResolveByType(uow)) + using (var uow = provider.GetUnitOfWork()) { - Assert.AreEqual(allContent.Count(), uow.Database.ExecuteScalar("select count(*) from cmsContentXml")); + Assert.AreEqual(allContent.Count(), uow.Database.ExecuteScalar("select count(*) from cmsContentXml")); } } @@ -820,8 +817,8 @@ namespace Umbraco.Tests.Services var allContent = rootContent.Concat(rootContent.SelectMany(x => x.Descendants())).ToList(); //for testing we need to clear out the contentXml table so we can see if it worked var provider = new PetaPocoUnitOfWorkProvider(Logger); - var uow = provider.GetUnitOfWork(); - using (RepositoryResolver.Current.ResolveByType(uow)) + + using (var uow = provider.GetUnitOfWork()) { uow.Database.TruncateTable("cmsContentXml"); } @@ -833,8 +830,7 @@ namespace Umbraco.Tests.Services contentService.RePublishAll(new int[]{allContent.Last().ContentTypeId}); // Assert - uow = provider.GetUnitOfWork(); - using (var repo = RepositoryResolver.Current.ResolveByType(uow)) + using (var uow = provider.GetUnitOfWork()) { Assert.AreEqual(allContent.Count(), uow.Database.ExecuteScalar("select count(*) from cmsContentXml")); } @@ -1273,21 +1269,25 @@ namespace Umbraco.Tests.Services var c2 = new Lazy(() => MockedContent.CreateSimpleContent(contentType, "Hierarchy Simple Text Subpage", c.Value.Id)); var list = new List> {c, c2}; - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - foreach (var content in list) + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) { - repository.AddOrUpdate(content.Value); - unitOfWork.Commit(); + foreach (var content in list) + { + repository.AddOrUpdate(content.Value); + unitOfWork.Commit(); + } + + Assert.That(c.Value.HasIdentity, Is.True); + Assert.That(c2.Value.HasIdentity, Is.True); + + Assert.That(c.Value.Id > 0, Is.True); + Assert.That(c2.Value.Id > 0, Is.True); + + Assert.That(c.Value.ParentId > 0, Is.True); + Assert.That(c2.Value.ParentId > 0, Is.True); } - - Assert.That(c.Value.HasIdentity, Is.True); - Assert.That(c2.Value.HasIdentity, Is.True); - - Assert.That(c.Value.Id > 0, Is.True); - Assert.That(c2.Value.Id > 0, Is.True); - - Assert.That(c.Value.ParentId > 0, Is.True); - Assert.That(c2.Value.ParentId > 0, Is.True); + } [Test] @@ -1376,16 +1376,15 @@ namespace Umbraco.Tests.Services contentService.Save(content); var provider = new PetaPocoUnitOfWorkProvider(Logger); - var uow = provider.GetUnitOfWork(); - using (RepositoryResolver.Current.ResolveByType(uow)) + + using (var uow = provider.GetUnitOfWork()) { Assert.IsFalse(uow.Database.Exists(content.Id)); } contentService.Publish(content); - uow = provider.GetUnitOfWork(); - using (RepositoryResolver.Current.ResolveByType(uow)) + using (var uow = provider.GetUnitOfWork()) { Assert.IsTrue(uow.Database.Exists(content.Id)); } @@ -1401,8 +1400,8 @@ namespace Umbraco.Tests.Services contentService.Save(content); var provider = new PetaPocoUnitOfWorkProvider(Logger); - var uow = provider.GetUnitOfWork(); - using (RepositoryResolver.Current.ResolveByType(uow)) + + using (var uow = provider.GetUnitOfWork()) { Assert.IsTrue(uow.Database.SingleOrDefault("WHERE nodeId=@nodeId AND versionId = @versionId", new{nodeId = content.Id, versionId = content.Version}) != null); } @@ -1440,5 +1439,14 @@ namespace Umbraco.Tests.Services } return list; } + + private ContentRepository CreateRepository(IDatabaseUnitOfWork unitOfWork, out ContentTypeRepository contentTypeRepository) + { + var templateRepository = new TemplateRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()); + var tagRepository = new TagRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of()); + contentTypeRepository = new ContentTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), templateRepository); + var repository = new ContentRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), contentTypeRepository, templateRepository, tagRepository); + return repository; + } } } \ No newline at end of file diff --git a/src/Umbraco.Tests/Services/MediaServiceTests.cs b/src/Umbraco.Tests/Services/MediaServiceTests.cs index 55ee9dfbf9..12d4b4b0aa 100644 --- a/src/Umbraco.Tests/Services/MediaServiceTests.cs +++ b/src/Umbraco.Tests/Services/MediaServiceTests.cs @@ -92,10 +92,8 @@ namespace Umbraco.Tests.Services var provider = new PetaPocoUnitOfWorkProvider(Logger); var uow = provider.GetUnitOfWork(); - using (RepositoryResolver.Current.ResolveByType(uow)) - { - Assert.IsTrue(uow.Database.Exists(media.Id)); - } + + Assert.IsTrue(uow.Database.Exists(media.Id)); } diff --git a/src/Umbraco.Tests/Services/MemberServiceTests.cs b/src/Umbraco.Tests/Services/MemberServiceTests.cs index 1e079ebc4e..d9cb75e587 100644 --- a/src/Umbraco.Tests/Services/MemberServiceTests.cs +++ b/src/Umbraco.Tests/Services/MemberServiceTests.cs @@ -1067,8 +1067,8 @@ namespace Umbraco.Tests.Services ServiceContext.MemberService.Save(customMember); var provider = new PetaPocoUnitOfWorkProvider(Logger); - var uow = provider.GetUnitOfWork(); - using (RepositoryResolver.Current.ResolveByType(uow)) + + using (var uow = provider.GetUnitOfWork()) { Assert.IsTrue(uow.Database.Exists(customMember.Id)); } diff --git a/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs b/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs index 88596eef49..add40b19cc 100644 --- a/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs +++ b/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs @@ -7,8 +7,10 @@ using System.Threading; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Cache; +using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Persistence.UnitOfWork; using Umbraco.Core.Publishing; using Umbraco.Core.Services; @@ -35,9 +37,9 @@ namespace Umbraco.Tests.Services //a Database instance is created per thread, whereas the default implementation which will work in an HttpContext //threading environment, or a single apartment threading environment will not work for this test because //it is multi-threaded. - _dbFactory = new PerThreadDatabaseFactory(); + _dbFactory = new PerThreadDatabaseFactory(Logger); //overwrite the local object - ApplicationContext.DatabaseContext = new DatabaseContext(_dbFactory); + ApplicationContext.DatabaseContext = new DatabaseContext(_dbFactory, Logger, new SqlCeSyntaxProvider(), "System.Data.SqlServerCe.4.0"); //disable cache var cacheHelper = CacheHelper.CreateDisabledCacheHelper(); @@ -45,8 +47,15 @@ namespace Umbraco.Tests.Services //here we are going to override the ServiceContext because normally with our test cases we use a //global Database object but this is NOT how it should work in the web world or in any multi threaded scenario. //we need a new Database object for each thread. + var repositoryFactory = new RepositoryFactory(cacheHelper, Logger, SqlSyntaxProvider, SettingsForTests.GenerateMockSettings()); _uowProvider = new PerThreadPetaPocoUnitOfWorkProvider(_dbFactory); - ApplicationContext.Services = new ServiceContext(_uowProvider, new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper, Logger); + ApplicationContext.Services = new ServiceContext( + repositoryFactory, + _uowProvider, + new FileUnitOfWorkProvider(), + new PublishingStrategy(), + cacheHelper, + Logger); CreateTestData(); } @@ -208,11 +217,20 @@ namespace Umbraco.Tests.Services /// internal class PerThreadDatabaseFactory : DisposableObject, IDatabaseFactory { - private readonly ConcurrentDictionary _databases = new ConcurrentDictionary(); + private readonly ILogger _logger; + + public PerThreadDatabaseFactory(ILogger logger) + { + _logger = logger; + } + + private readonly ConcurrentDictionary _databases = new ConcurrentDictionary(); public UmbracoDatabase CreateDatabase() { - var db = _databases.GetOrAdd(Thread.CurrentThread.ManagedThreadId, i => new UmbracoDatabase(Umbraco.Core.Configuration.GlobalSettings.UmbracoConnectionName)); + var db = _databases.GetOrAdd( + Thread.CurrentThread.ManagedThreadId, + i => new UmbracoDatabase(Umbraco.Core.Configuration.GlobalSettings.UmbracoConnectionName, _logger)); return db; } diff --git a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs index 8e4715e9d5..548b412d5b 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs @@ -73,13 +73,15 @@ namespace Umbraco.Tests.TestHelpers GetDbProviderName(), Logger); + var repositoryFactory = new RepositoryFactory(cacheHelper, Logger, SqlSyntaxProvider, SettingsForTests.GenerateMockSettings()); + _appContext = new ApplicationContext( //assign the db context - new DatabaseContext(dbFactory, Logger, SqlSyntaxProvider), + new DatabaseContext(dbFactory, Logger, SqlSyntaxProvider, "System.Data.SqlServerCe.4.0"), //assign the service context - new ServiceContext(new PetaPocoUnitOfWorkProvider(dbFactory), new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper, Logger), - cacheHelper, - Logger) + new ServiceContext(repositoryFactory, new PetaPocoUnitOfWorkProvider(dbFactory), new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper, Logger), + cacheHelper, + Logger) { IsReady = true }; @@ -101,7 +103,7 @@ namespace Umbraco.Tests.TestHelpers protected virtual ISqlSyntaxProvider SqlSyntaxProvider { - get { return new SqlCeSyntaxProvider();} + get { return new SqlCeSyntaxProvider(); } } protected override void SetupApplicationContext() @@ -131,7 +133,7 @@ namespace Umbraco.Tests.TestHelpers /// protected virtual string GetDbConnectionString() { - return @"Datasource=|DataDirectory|UmbracoPetaPocoTests.sdf;Flush Interval=1;"; + return @"Datasource=|DataDirectory|UmbracoPetaPocoTests.sdf;Flush Interval=1;"; } /// @@ -143,11 +145,11 @@ namespace Umbraco.Tests.TestHelpers return; var path = TestHelper.CurrentAssemblyDirectory; - + //Get the connectionstring settings from config var settings = ConfigurationManager.ConnectionStrings[Core.Configuration.GlobalSettings.UmbracoConnectionName]; ConfigurationManager.AppSettings.Set( - Core.Configuration.GlobalSettings.UmbracoConnectionName, + Core.Configuration.GlobalSettings.UmbracoConnectionName, GetDbConnectionString()); _dbPath = string.Concat(path, "\\UmbracoPetaPocoTests.sdf"); @@ -159,7 +161,7 @@ namespace Umbraco.Tests.TestHelpers // - _isFirstTestInFixture + DbInitBehavior.NewDbFileAndSchemaPerFixture //if this is the first test in the session, always ensure a new db file is created - if (_isFirstRunInTestSession || File.Exists(_dbPath) == false + if (_isFirstRunInTestSession || File.Exists(_dbPath) == false || DatabaseTestBehavior == DatabaseBehavior.NewDbFileAndSchemaPerTest || (_isFirstTestInFixture && DatabaseTestBehavior == DatabaseBehavior.NewDbFileAndSchemaPerFixture)) { @@ -185,10 +187,10 @@ namespace Umbraco.Tests.TestHelpers else { var engine = new SqlCeEngine(settings.ConnectionString); - engine.CreateDatabase(); + engine.CreateDatabase(); } } - + } } @@ -204,15 +206,6 @@ namespace Umbraco.Tests.TestHelpers DataTypesResolver.Current = new DataTypesResolver( () => PluginManager.Current.ResolveDataTypes()); - RepositoryResolver.Current = new RepositoryResolver( - new RepositoryFactory(CacheHelper.CreateDisabledCacheHelper(), //disable all repo caches for tests! - Logger, - SqlSyntaxProvider, - SettingsForTests.GenerateMockSettings())); - - SqlSyntaxProvidersResolver.Current = new SqlSyntaxProvidersResolver( - new List { typeof(MySqlSyntaxProvider), typeof(SqlCeSyntaxProvider), typeof(SqlServerSyntaxProvider) }) { CanResolveBeforeFrozen = true }; - MappingResolver.Current = new MappingResolver( () => PluginManager.Current.ResolveAssignedMapperTypes()); @@ -238,7 +231,7 @@ namespace Umbraco.Tests.TestHelpers // - NewDbFileAndSchemaPerTest // - _isFirstTestInFixture + DbInitBehavior.NewDbFileAndSchemaPerFixture - if (_dbBytes == null && + if (_dbBytes == null && (_isFirstRunInTestSession || DatabaseTestBehavior == DatabaseBehavior.NewDbFileAndSchemaPerTest || (_isFirstTestInFixture && DatabaseTestBehavior == DatabaseBehavior.NewDbFileAndSchemaPerFixture))) @@ -253,7 +246,7 @@ namespace Umbraco.Tests.TestHelpers CloseDbConnections(); _dbBytes = File.ReadAllBytes(_dbPath); - } + } } [TestFixtureTearDown] @@ -278,7 +271,7 @@ namespace Umbraco.Tests.TestHelpers SqlSyntaxContext.SqlSyntaxProvider = null; } - + base.TearDown(); } @@ -343,15 +336,15 @@ namespace Umbraco.Tests.TestHelpers } } - protected ServiceContext ServiceContext - { - get { return ApplicationContext.Services; } - } + protected ServiceContext ServiceContext + { + get { return ApplicationContext.Services; } + } - protected DatabaseContext DatabaseContext - { - get { return ApplicationContext.DatabaseContext; } - } + protected DatabaseContext DatabaseContext + { + get { return ApplicationContext.DatabaseContext; } + } protected UmbracoContext GetUmbracoContext(string url, int templateId, RouteData routeData = null, bool setSingleton = false) { diff --git a/src/Umbraco.Tests/TestHelpers/BaseDatabaseTest.cs b/src/Umbraco.Tests/TestHelpers/BaseDatabaseTest.cs index 7a62b5f5df..ba64d8e8a0 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseDatabaseTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseDatabaseTest.cs @@ -59,28 +59,19 @@ namespace Umbraco.Tests.TestHelpers throw; } - - RepositoryResolver.Current = new RepositoryResolver( - new RepositoryFactory(CacheHelper.CreateDisabledCacheHelper(),//disable all repo caches for tests! - Logger, - SyntaxProvider, - Mock.Of())); - - SqlSyntaxProvidersResolver.Current = new SqlSyntaxProvidersResolver( - new List { typeof(MySqlSyntaxProvider), typeof(SqlCeSyntaxProvider), typeof(SqlServerSyntaxProvider) }) { CanResolveBeforeFrozen = true }; - Resolution.Freeze(); //disable cache var cacheHelper = CacheHelper.CreateDisabledCacheHelper(); var logger = new Logger(new FileInfo(TestHelper.MapPathForTest("~/unit-test-log4net.config"))); - + var repositoryFactory = new RepositoryFactory(cacheHelper, Logger, SyntaxProvider, SettingsForTests.GenerateMockSettings()); + var dbFactory = new DefaultDatabaseFactory(GlobalSettings.UmbracoConnectionName, logger); ApplicationContext.Current = new ApplicationContext( //assign the db context - new DatabaseContext(new DefaultDatabaseFactory(GlobalSettings.UmbracoConnectionName, logger)), + new DatabaseContext(dbFactory, logger, SqlSyntaxProviders.CreateDefault(logger)), //assign the service context - new ServiceContext(new PetaPocoUnitOfWorkProvider(), new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper, logger), + new ServiceContext(repositoryFactory, new PetaPocoUnitOfWorkProvider(dbFactory), new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper, logger), cacheHelper, logger) { @@ -110,8 +101,6 @@ namespace Umbraco.Tests.TestHelpers //reset the app context ApplicationContext.Current = null; - - RepositoryResolver.Reset(); } } } \ No newline at end of file diff --git a/src/Umbraco.Tests/TestHelpers/BaseUmbracoApplicationTest.cs b/src/Umbraco.Tests/TestHelpers/BaseUmbracoApplicationTest.cs index 7c25c29600..fda4f37542 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseUmbracoApplicationTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseUmbracoApplicationTest.cs @@ -43,7 +43,7 @@ namespace Umbraco.Tests.TestHelpers using (DisposableTimer.TraceDuration("init", "init")) { TestHelper.InitializeContentDirectories(); - + InitializeLegacyMappingsForCoreEditors(); SetupPluginManager(); @@ -54,7 +54,7 @@ namespace Umbraco.Tests.TestHelpers FreezeResolution(); } - + } [TearDown] @@ -73,12 +73,12 @@ namespace Umbraco.Tests.TestHelpers //reset the app context, this should reset most things that require resetting like ALL resolvers ObjectExtensions.DisposeIfDisposable(ApplicationContext.Current); ApplicationContext.Current = null; - ResetPluginManager(); + ResetPluginManager(); } - + } - - private static readonly object Locker = new object(); + + private static readonly object Locker = new object(); private static void InitializeLegacyMappingsForCoreEditors() { @@ -89,9 +89,9 @@ namespace Umbraco.Tests.TestHelpers //Create the legacy prop-eds mapping LegacyPropertyEditorIdToAliasConverter.CreateMappingsForCoreEditors(); } - } + } } - + /// /// If this class requires auto-mapper mapping initialization then init them /// @@ -115,7 +115,7 @@ namespace Umbraco.Tests.TestHelpers { mapper.ConfigureMappings(configuration, ApplicationContext); } - }); + }); } } @@ -136,7 +136,7 @@ namespace Umbraco.Tests.TestHelpers { if (PluginManagerResetRequired) { - PluginManager.Current = null; + PluginManager.Current = null; } } @@ -148,12 +148,15 @@ namespace Umbraco.Tests.TestHelpers //disable cache var cacheHelper = CacheHelper.CreateDisabledCacheHelper(); + var sqlSyntax = new SqlCeSyntaxProvider(); + var repoFactory = new RepositoryFactory(CacheHelper.CreateDisabledCacheHelper(), Logger, sqlSyntax, SettingsForTests.GenerateMockSettings()); + ApplicationContext.Current = new ApplicationContext( //assign the db context - new DatabaseContext(new DefaultDatabaseFactory(Core.Configuration.GlobalSettings.UmbracoConnectionName, Logger), - Logger, new SqlCeSyntaxProvider()), + new DatabaseContext(new DefaultDatabaseFactory(Core.Configuration.GlobalSettings.UmbracoConnectionName, Logger), + Logger, sqlSyntax, "System.Data.SqlServerCe.4.0"), //assign the service context - new ServiceContext(new PetaPocoUnitOfWorkProvider(Logger), new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper, Logger), + new ServiceContext(repoFactory, new PetaPocoUnitOfWorkProvider(Logger), new FileUnitOfWorkProvider(), new PublishingStrategy(), cacheHelper, Logger), cacheHelper, Logger) { diff --git a/src/Umbraco.Web/Standalone/ServiceContextManager.cs b/src/Umbraco.Web/Standalone/ServiceContextManager.cs index 6e782f37a8..32c0867429 100644 --- a/src/Umbraco.Web/Standalone/ServiceContextManager.cs +++ b/src/Umbraco.Web/Standalone/ServiceContextManager.cs @@ -2,9 +2,11 @@ using System.Diagnostics; using Umbraco.Core; using Umbraco.Core.Cache; +using Umbraco.Core.Configuration; using Umbraco.Core.Logging; using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Mappers; +using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Persistence.UnitOfWork; using Umbraco.Core.Publishing; using Umbraco.Core.Services; @@ -18,14 +20,16 @@ namespace Umbraco.Web.Standalone private readonly string _connectionString; private readonly string _providerName; private readonly ILogger _logger; + private readonly ISqlSyntaxProvider _syntaxProvider; private ServiceContext _serviceContext; private readonly StandaloneApplication _application; - public ServiceContextManager(string connectionString, string providerName, string baseDirectory, ILogger logger) + public ServiceContextManager(string connectionString, string providerName, string baseDirectory, ILogger logger, ISqlSyntaxProvider syntaxProvider) { _connectionString = connectionString; _providerName = providerName; _logger = logger; + _syntaxProvider = syntaxProvider; Trace.WriteLine("Current AppDomain: " + AppDomain.CurrentDomain.FriendlyName); Trace.WriteLine("Current AppDomain: " + AppDomain.CurrentDomain.BaseDirectory); @@ -50,9 +54,10 @@ namespace Umbraco.Web.Standalone new NullCacheProvider()); var dbFactory = new DefaultDatabaseFactory(_connectionString, _providerName, _logger); - var dbContext = new DatabaseContext(dbFactory, _logger); + var dbContext = new DatabaseContext(dbFactory, _logger, _syntaxProvider, _providerName); Database.Mapper = new PetaPocoMapper(); _serviceContext = new ServiceContext( + new RepositoryFactory(cacheHelper, _logger, dbContext.SqlSyntax, UmbracoConfig.For.UmbracoSettings()), new PetaPocoUnitOfWorkProvider(dbFactory), new FileUnitOfWorkProvider(), new PublishingStrategy(),