Files
Umbraco-CMS/src/Umbraco.Infrastructure/Composing/CompositionExtensions/Services.cs

132 lines
7.3 KiB
C#
Raw Normal View History

2018-07-20 09:49:05 +02:00
using System;
using System.IO;
using System.Linq;
using Microsoft.Extensions.Options;
2018-07-20 09:49:05 +02:00
using Umbraco.Core.Cache;
2019-11-19 08:52:39 +01:00
using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.Models;
2018-07-20 09:49:05 +02:00
using Umbraco.Core.Events;
using Umbraco.Core.Hosting;
2018-07-20 09:49:05 +02:00
using Umbraco.Core.IO;
using Umbraco.Core.Logging;
using Umbraco.Core.Packaging;
2020-08-13 10:13:23 +02:00
using Umbraco.Core.Routing;
2018-07-20 09:49:05 +02:00
using Umbraco.Core.Services;
using Umbraco.Core.Services.Implement;
namespace Umbraco.Core.Composing.CompositionExtensions
2018-07-20 09:49:05 +02:00
{
2019-12-19 12:24:30 +01:00
internal static class Services
2018-07-20 09:49:05 +02:00
{
2018-11-27 10:37:33 +01:00
public static Composition ComposeServices(this Composition composition)
2018-07-20 09:49:05 +02:00
{
// register a transient messages factory, which will be replaced by the web
// boot manager when running in a web context
2018-11-29 10:35:16 +01:00
composition.RegisterUnique<IEventMessagesFactory, TransientEventMessagesFactory>();
2018-07-20 09:49:05 +02:00
// register the service context
2018-11-29 10:35:16 +01:00
composition.RegisterUnique<ServiceContext>();
2018-07-20 09:49:05 +02:00
// register the special idk map
composition.RegisterUnique<IIdKeyMap, IdKeyMap>();
2018-07-20 09:49:05 +02:00
// register the services
composition.RegisterUnique<IPropertyValidationService, PropertyValidationService>();
2018-11-29 10:35:16 +01:00
composition.RegisterUnique<IKeyValueService, KeyValueService>();
composition.RegisterUnique<IPublicAccessService, PublicAccessService>();
composition.RegisterUnique<IDomainService, DomainService>();
composition.RegisterUnique<IAuditService, AuditService>();
composition.RegisterUnique<ITagService, TagService>();
composition.RegisterUnique<IContentService, ContentService>();
composition.RegisterUnique<IUserService, UserService>();
composition.RegisterUnique<IMemberService, MemberService>();
composition.RegisterUnique<IMediaService, MediaService>();
composition.RegisterUnique<IContentTypeService, ContentTypeService>();
2019-02-01 17:16:50 +01:00
composition.RegisterUnique<IContentTypeBaseServiceProvider, ContentTypeBaseServiceProvider>();
2018-11-29 10:35:16 +01:00
composition.RegisterUnique<IMediaTypeService, MediaTypeService>();
composition.RegisterUnique<IDataTypeService, DataTypeService>();
composition.RegisterUnique<IFileService, FileService>();
composition.RegisterUnique<ILocalizationService, LocalizationService>();
composition.RegisterUnique<IPackagingService, PackagingService>();
composition.RegisterUnique<IServerRegistrationService, ServerRegistrationService>();
composition.RegisterUnique<IEntityService, EntityService>();
composition.RegisterUnique<IRelationService, RelationService>();
composition.RegisterUnique<IMacroService, MacroService>();
composition.RegisterUnique<IMemberTypeService, MemberTypeService>();
composition.RegisterUnique<IMemberGroupService, MemberGroupService>();
composition.RegisterUnique<INotificationService, NotificationService>();
composition.RegisterUnique<IExternalLoginService, ExternalLoginService>();
composition.RegisterUnique<IRedirectUrlService, RedirectUrlService>();
composition.RegisterUnique<IConsentService, ConsentService>();
2018-11-28 11:05:41 +01:00
composition.Register<LocalizedTextServiceFileSources>(SourcesFactory);
2018-11-29 10:35:16 +01:00
composition.RegisterUnique<ILocalizedTextService>(factory => new LocalizedTextService(
2018-07-20 09:49:05 +02:00
factory.GetInstance<Lazy<LocalizedTextServiceFileSources>>(),
factory.GetInstance<ILogger>()));
composition.RegisterUnique<IEntityXmlSerializer, EntityXmlSerializer>();
composition.RegisterUnique<IPackageActionRunner, PackageActionRunner>();
composition.RegisterUnique<ConflictingPackageData>();
composition.RegisterUnique<CompiledPackageXmlParser>();
composition.RegisterUnique<ICreatedPackagesRepository>(factory => CreatePackageRepository(factory, "createdPackages.config"));
composition.RegisterUnique<IInstalledPackagesRepository>(factory => CreatePackageRepository(factory, "installedPackages.config"));
composition.RegisterUnique<PackageDataInstallation>();
composition.RegisterUnique<PackageFileInstallation>();
composition.RegisterUnique<IPackageInstallation, PackageInstallation>();
2018-11-27 10:37:33 +01:00
return composition;
2018-07-20 15:45:01 +02:00
}
/// <summary>
/// Creates an instance of PackagesRepository for either the ICreatedPackagesRepository or the IInstalledPackagesRepository
/// </summary>
/// <param name="factory"></param>
/// <param name="packageRepoFileName"></param>
/// <returns></returns>
private static PackagesRepository CreatePackageRepository(IFactory factory, string packageRepoFileName)
2019-01-18 10:02:47 +01:00
=> new PackagesRepository(
2019-11-19 13:01:00 +01:00
factory.GetInstance<IContentService>(),
factory.GetInstance<IContentTypeService>(),
factory.GetInstance<IDataTypeService>(),
factory.GetInstance<IFileService>(),
factory.GetInstance<IMacroService>(),
factory.GetInstance<ILocalizationService>(),
factory.GetInstance<IHostingEnvironment>(),
2019-11-19 13:01:00 +01:00
factory.GetInstance<IEntityXmlSerializer>(),
factory.GetInstance<ILogger>(),
factory.GetInstance<IUmbracoVersion>(),
factory.GetInstance<IOptions<GlobalSettings>>(),
packageRepoFileName);
2018-11-28 11:05:41 +01:00
private static LocalizedTextServiceFileSources SourcesFactory(IFactory container)
2018-07-20 15:45:01 +02:00
{
var hostingEnvironment = container.GetInstance<IHostingEnvironment>();
var globalSettings = container.GetInstance<IOptions<GlobalSettings>>().Value;
var mainLangFolder = new DirectoryInfo(hostingEnvironment.MapPathContentRoot(WebPath.Combine(globalSettings.Path , "config","lang")));
var appPlugins = new DirectoryInfo(hostingEnvironment.MapPathContentRoot(Constants.SystemDirectories.AppPlugins));
2020-08-13 10:13:23 +02:00
var configLangFolder = new DirectoryInfo(hostingEnvironment.MapPathContentRoot(WebPath.Combine(Constants.SystemDirectories.Config ,"lang")));
2018-07-20 15:45:01 +02:00
var pluginLangFolders = appPlugins.Exists == false
? Enumerable.Empty<LocalizedTextServiceSupplementaryFileSource>()
: appPlugins.GetDirectories()
.SelectMany(x => x.GetDirectories("Lang", SearchOption.AllDirectories))
2018-07-20 15:45:01 +02:00
.SelectMany(x => x.GetFiles("*.xml", SearchOption.TopDirectoryOnly))
.Select(x => new LocalizedTextServiceSupplementaryFileSource(x, false));
//user defined langs that overwrite the default, these should not be used by plugin creators
var userLangFolders = configLangFolder.Exists == false
? Enumerable.Empty<LocalizedTextServiceSupplementaryFileSource>()
: configLangFolder
.GetFiles("*.user.xml", SearchOption.TopDirectoryOnly)
.Select(x => new LocalizedTextServiceSupplementaryFileSource(x, true));
2018-07-20 09:49:05 +02:00
2018-07-20 15:45:01 +02:00
return new LocalizedTextServiceFileSources(
container.GetInstance<ILogger>(),
container.GetInstance<AppCaches>(),
2018-07-20 15:45:01 +02:00
mainLangFolder,
pluginLangFolders.Concat(userLangFolders));
2018-07-20 09:49:05 +02:00
}
}
}