From 6593f4eaaaeb1594b277349797d450f5dc1506b0 Mon Sep 17 00:00:00 2001 From: Shannon Date: Mon, 21 Dec 2015 14:27:36 +0100 Subject: [PATCH] creates ServicesCompositionRoot --- src/Umbraco.Core/CoreBootManager.cs | 21 +++-------- .../ConfigurationCompositionRoot.cs | 10 +++--- .../RepositoryCompositionRoot.cs | 11 +++--- .../ServicesCompositionRoot.cs | 35 +++++++++++++++++++ .../UnitOfWork/PetaPocoUnitOfWorkProvider.cs | 14 +------- src/Umbraco.Core/Services/ServiceContext.cs | 19 ---------- .../Services/ServiceWithResultExtensions.cs | 21 +++++++++++ src/Umbraco.Core/Umbraco.Core.csproj | 2 ++ 8 files changed, 75 insertions(+), 58 deletions(-) create mode 100644 src/Umbraco.Core/DependencyInjection/ServicesCompositionRoot.cs create mode 100644 src/Umbraco.Core/Services/ServiceWithResultExtensions.cs diff --git a/src/Umbraco.Core/CoreBootManager.cs b/src/Umbraco.Core/CoreBootManager.cs index 840bb142bd..269d1cfcbe 100644 --- a/src/Umbraco.Core/CoreBootManager.cs +++ b/src/Umbraco.Core/CoreBootManager.cs @@ -175,27 +175,16 @@ namespace Umbraco.Core //Datalayer/Repositories/SQL/Database/etc... container.RegisterFrom(); - + + //Data Services/ServiceContext/etc... + container.RegisterFrom(); + container.Register(); - container.Register(factory => PluginManager, new PerContainerLifetime()); - - container.Register(); - - container.Register(factory => new ServiceContext( - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetInstance(), - factory.GetAllInstances())); + container.Register(factory => PluginManager, new PerContainerLifetime()); container.Register(new PerContainerLifetime()); container.Register(factory => FileSystemProviderManager.Current.GetFileSystemProvider()); - //These will be replaced by the web boot manager when running in a web context - container.Register(); } /// diff --git a/src/Umbraco.Core/DependencyInjection/ConfigurationCompositionRoot.cs b/src/Umbraco.Core/DependencyInjection/ConfigurationCompositionRoot.cs index 2e1f2be8a3..df38fbfbb4 100644 --- a/src/Umbraco.Core/DependencyInjection/ConfigurationCompositionRoot.cs +++ b/src/Umbraco.Core/DependencyInjection/ConfigurationCompositionRoot.cs @@ -9,12 +9,12 @@ namespace Umbraco.Core.DependencyInjection /// public sealed class ConfigurationCompositionRoot : ICompositionRoot { - public void Compose(IServiceRegistry serviceRegistry) + public void Compose(IServiceRegistry container) { - serviceRegistry.Register(factory => UmbracoConfig.For.UmbracoSettings()); - serviceRegistry.Register(factory => factory.GetInstance().Content); - serviceRegistry.Register(factory => factory.GetInstance().Templates); - serviceRegistry.Register(factory => factory.GetInstance().RequestHandler); + container.Register(factory => UmbracoConfig.For.UmbracoSettings()); + container.Register(factory => factory.GetInstance().Content); + container.Register(factory => factory.GetInstance().Templates); + container.Register(factory => factory.GetInstance().RequestHandler); //TODO: Add the other config areas... } diff --git a/src/Umbraco.Core/DependencyInjection/RepositoryCompositionRoot.cs b/src/Umbraco.Core/DependencyInjection/RepositoryCompositionRoot.cs index 833cf68407..fed06943f3 100644 --- a/src/Umbraco.Core/DependencyInjection/RepositoryCompositionRoot.cs +++ b/src/Umbraco.Core/DependencyInjection/RepositoryCompositionRoot.cs @@ -19,15 +19,16 @@ namespace Umbraco.Core.DependencyInjection { public void Compose(IServiceRegistry container) { - container.Register(factory => new DefaultDatabaseFactory(GlobalSettings.UmbracoConnectionName, factory.GetInstance())); + container.Register(factory => new DefaultDatabaseFactory(GlobalSettings.UmbracoConnectionName, factory.GetInstance()), new PerContainerLifetime()); container.Register(factory => GetDbContext(factory), new PerContainerLifetime()); - container.Register(factory => SqlSyntaxProviders.CreateDefault(factory.GetInstance())); - container.Register(); - container.Register(); + container.Register(factory => SqlSyntaxProviders.CreateDefault(factory.GetInstance()), new PerContainerLifetime()); + container.Register(new PerContainerLifetime()); + container.Register(factory => new PetaPocoUnitOfWorkProvider(factory.GetInstance()), new PerContainerLifetime()); container.Register(factory => new MappingResolver( factory.GetInstance(), factory.GetInstance(), - () => factory.GetInstance().ResolveAssignedMapperTypes())); + () => factory.GetInstance().ResolveAssignedMapperTypes()), + new PerContainerLifetime()); container.Register(); container.Register(factory => factory.GetInstance().SqlSyntax); container.Register(factory => CacheHelper.CreateDisabledCacheHelper(), "DisabledCache", new PerContainerLifetime()); diff --git a/src/Umbraco.Core/DependencyInjection/ServicesCompositionRoot.cs b/src/Umbraco.Core/DependencyInjection/ServicesCompositionRoot.cs new file mode 100644 index 0000000000..08ff442a0f --- /dev/null +++ b/src/Umbraco.Core/DependencyInjection/ServicesCompositionRoot.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using LightInject; +using Umbraco.Core.Events; +using Umbraco.Core.Logging; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.UnitOfWork; +using Umbraco.Core.Publishing; +using Umbraco.Core.Services; +using Umbraco.Core.Strings; + +namespace Umbraco.Core.DependencyInjection +{ + public sealed class ServicesCompositionRoot : ICompositionRoot + { + public void Compose(IServiceRegistry container) + { + container.Register(new PerContainerLifetime()); + + //These will be replaced by the web boot manager when running in a web context + container.Register(); + + container.Register(factory => new ServiceContext( + factory.GetInstance(), + factory.GetInstance(), + factory.GetInstance(), + factory.GetInstance(), + factory.GetInstance(), + factory.GetInstance(), + factory.GetInstance(), + factory.GetInstance>()), + new PerContainerLifetime()); + + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/UnitOfWork/PetaPocoUnitOfWorkProvider.cs b/src/Umbraco.Core/Persistence/UnitOfWork/PetaPocoUnitOfWorkProvider.cs index 8c909fc554..65dc09b418 100644 --- a/src/Umbraco.Core/Persistence/UnitOfWork/PetaPocoUnitOfWorkProvider.cs +++ b/src/Umbraco.Core/Persistence/UnitOfWork/PetaPocoUnitOfWorkProvider.cs @@ -10,19 +10,7 @@ namespace Umbraco.Core.Persistence.UnitOfWork public class PetaPocoUnitOfWorkProvider : IDatabaseUnitOfWorkProvider { private readonly IDatabaseFactory _dbFactory; - - [Obsolete("Use the constructor specifying an ILogger instead")] - public PetaPocoUnitOfWorkProvider() - : this(new DefaultDatabaseFactory(GlobalSettings.UmbracoConnectionName, LoggerResolver.Current.Logger)) - { - - } - - [Obsolete("Use the constructor specifying an ILogger instead")] - public PetaPocoUnitOfWorkProvider(string connectionString, string providerName) - : this(new DefaultDatabaseFactory(connectionString, providerName, LoggerResolver.Current.Logger)) - { } - + /// /// Parameterless constructor uses defaults /// diff --git a/src/Umbraco.Core/Services/ServiceContext.cs b/src/Umbraco.Core/Services/ServiceContext.cs index 8a834194d3..600a8d120d 100644 --- a/src/Umbraco.Core/Services/ServiceContext.cs +++ b/src/Umbraco.Core/Services/ServiceContext.cs @@ -14,25 +14,6 @@ using Umbraco.Core.Strings; namespace Umbraco.Core.Services { - /// - /// These are used currently to return the temporary 'operation' interfaces for services - /// which are used to return a status from operational methods so we can determine if things are - /// cancelled, etc... - /// - /// These will be obsoleted in v8 since all real services methods will be changed to have the correct result. - /// - public static class ServiceWithResultExtensions - { - public static IContentServiceOperations WithResult(this IContentService contentService) - { - return (IContentServiceOperations)contentService; - } - public static IMediaServiceOperations WithResult(this IMediaService mediaService) - { - return (IMediaServiceOperations)mediaService; - } - } - /// /// The Umbraco ServiceContext, which provides access to the following services: /// , , , diff --git a/src/Umbraco.Core/Services/ServiceWithResultExtensions.cs b/src/Umbraco.Core/Services/ServiceWithResultExtensions.cs new file mode 100644 index 0000000000..d272eb5bf9 --- /dev/null +++ b/src/Umbraco.Core/Services/ServiceWithResultExtensions.cs @@ -0,0 +1,21 @@ +namespace Umbraco.Core.Services +{ + /// + /// These are used currently to return the temporary 'operation' interfaces for services + /// which are used to return a status from operational methods so we can determine if things are + /// cancelled, etc... + /// + /// These will be obsoleted in v8 since all real services methods will be changed to have the correct result. + /// + public static class ServiceWithResultExtensions + { + public static IContentServiceOperations WithResult(this IContentService contentService) + { + return (IContentServiceOperations)contentService; + } + public static IMediaServiceOperations WithResult(this IMediaService mediaService) + { + return (IMediaServiceOperations)mediaService; + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 3027275fcf..36dba43e90 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -292,6 +292,7 @@ + @@ -510,6 +511,7 @@ +