2020-12-24 11:46:17 +11:00
|
|
|
using System;
|
2018-07-20 09:49:05 +02:00
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
2020-10-30 11:16:17 +00:00
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
2020-09-21 08:19:26 +02:00
|
|
|
using Microsoft.Extensions.Logging;
|
2020-12-16 22:26:47 +01:00
|
|
|
using Microsoft.Extensions.Options;
|
2021-02-23 12:24:51 +01:00
|
|
|
using Umbraco.Cms.Core;
|
2021-02-09 10:22:42 +01:00
|
|
|
using Umbraco.Cms.Core.Cache;
|
|
|
|
|
using Umbraco.Cms.Core.Configuration;
|
|
|
|
|
using Umbraco.Cms.Core.Configuration.Models;
|
|
|
|
|
using Umbraco.Cms.Core.DependencyInjection;
|
|
|
|
|
using Umbraco.Cms.Core.Hosting;
|
|
|
|
|
using Umbraco.Cms.Core.Packaging;
|
|
|
|
|
using Umbraco.Cms.Core.Routing;
|
|
|
|
|
using Umbraco.Cms.Core.Services;
|
2021-02-23 12:24:51 +01:00
|
|
|
using Umbraco.Cms.Core.Services.Implement;
|
2021-02-09 13:32:34 +01:00
|
|
|
using Umbraco.Extensions;
|
2018-07-20 09:49:05 +02:00
|
|
|
|
2021-02-12 10:41:07 +01:00
|
|
|
namespace Umbraco.Cms.Infrastructure.DependencyInjection
|
2018-07-20 09:49:05 +02:00
|
|
|
{
|
2020-12-24 11:46:17 +11:00
|
|
|
public static partial class UmbracoBuilderExtensions
|
2018-07-20 09:49:05 +02:00
|
|
|
{
|
2020-12-24 11:46:17 +11:00
|
|
|
/// <summary>
|
|
|
|
|
/// Adds Umbraco services
|
|
|
|
|
/// </summary>
|
|
|
|
|
internal static IUmbracoBuilder AddServices(this IUmbracoBuilder builder)
|
2018-07-20 09:49:05 +02:00
|
|
|
{
|
|
|
|
|
// register the service context
|
2020-11-18 17:40:23 +00:00
|
|
|
builder.Services.AddUnique<ServiceContext>();
|
2018-07-20 09:49:05 +02:00
|
|
|
|
|
|
|
|
// register the special idk map
|
2020-11-18 17:40:23 +00:00
|
|
|
builder.Services.AddUnique<IIdKeyMap, IdKeyMap>();
|
2018-07-20 09:49:05 +02:00
|
|
|
|
|
|
|
|
// register the services
|
2020-11-18 17:40:23 +00:00
|
|
|
builder.Services.AddUnique<IPropertyValidationService, PropertyValidationService>();
|
|
|
|
|
builder.Services.AddUnique<IKeyValueService, KeyValueService>();
|
|
|
|
|
builder.Services.AddUnique<IPublicAccessService, PublicAccessService>();
|
|
|
|
|
builder.Services.AddUnique<IDomainService, DomainService>();
|
|
|
|
|
builder.Services.AddUnique<IAuditService, AuditService>();
|
|
|
|
|
builder.Services.AddUnique<ITagService, TagService>();
|
|
|
|
|
builder.Services.AddUnique<IContentService, ContentService>();
|
|
|
|
|
builder.Services.AddUnique<IUserService, UserService>();
|
|
|
|
|
builder.Services.AddUnique<IMemberService, MemberService>();
|
|
|
|
|
builder.Services.AddUnique<IMediaService, MediaService>();
|
|
|
|
|
builder.Services.AddUnique<IContentTypeService, ContentTypeService>();
|
|
|
|
|
builder.Services.AddUnique<IContentTypeBaseServiceProvider, ContentTypeBaseServiceProvider>();
|
|
|
|
|
builder.Services.AddUnique<IMediaTypeService, MediaTypeService>();
|
|
|
|
|
builder.Services.AddUnique<IDataTypeService, DataTypeService>();
|
|
|
|
|
builder.Services.AddUnique<IFileService, FileService>();
|
|
|
|
|
builder.Services.AddUnique<ILocalizationService, LocalizationService>();
|
|
|
|
|
builder.Services.AddUnique<IPackagingService, PackagingService>();
|
|
|
|
|
builder.Services.AddUnique<IServerRegistrationService, ServerRegistrationService>();
|
|
|
|
|
builder.Services.AddUnique<IEntityService, EntityService>();
|
|
|
|
|
builder.Services.AddUnique<IRelationService, RelationService>();
|
|
|
|
|
builder.Services.AddUnique<IMacroService, MacroService>();
|
|
|
|
|
builder.Services.AddUnique<IMemberTypeService, MemberTypeService>();
|
|
|
|
|
builder.Services.AddUnique<IMemberGroupService, MemberGroupService>();
|
|
|
|
|
builder.Services.AddUnique<INotificationService, NotificationService>();
|
|
|
|
|
builder.Services.AddUnique<IExternalLoginService, ExternalLoginService>();
|
|
|
|
|
builder.Services.AddUnique<IRedirectUrlService, RedirectUrlService>();
|
|
|
|
|
builder.Services.AddUnique<IConsentService, ConsentService>();
|
2020-12-24 11:46:17 +11:00
|
|
|
builder.Services.AddTransient(SourcesFactory);
|
2020-11-18 17:40:23 +00:00
|
|
|
builder.Services.AddUnique<ILocalizedTextService>(factory => new LocalizedTextService(
|
2020-10-27 10:53:01 +00:00
|
|
|
factory.GetRequiredService<Lazy<LocalizedTextServiceFileSources>>(),
|
|
|
|
|
factory.GetRequiredService<ILogger<LocalizedTextService>>()));
|
2018-07-20 09:49:05 +02:00
|
|
|
|
2020-11-18 17:40:23 +00:00
|
|
|
builder.Services.AddUnique<IEntityXmlSerializer, EntityXmlSerializer>();
|
2019-01-10 12:44:57 +11:00
|
|
|
|
2020-11-18 17:40:23 +00:00
|
|
|
builder.Services.AddUnique<IPackageActionRunner, PackageActionRunner>();
|
2019-01-11 14:30:04 +11:00
|
|
|
|
2020-11-18 17:40:23 +00:00
|
|
|
builder.Services.AddUnique<ConflictingPackageData>();
|
|
|
|
|
builder.Services.AddUnique<CompiledPackageXmlParser>();
|
|
|
|
|
builder.Services.AddUnique<ICreatedPackagesRepository>(factory => CreatePackageRepository(factory, "createdPackages.config"));
|
|
|
|
|
builder.Services.AddUnique<IInstalledPackagesRepository>(factory => CreatePackageRepository(factory, "installedPackages.config"));
|
|
|
|
|
builder.Services.AddUnique<PackageDataInstallation>();
|
|
|
|
|
builder.Services.AddUnique<PackageFileInstallation>();
|
|
|
|
|
builder.Services.AddUnique<IPackageInstallation, PackageInstallation>();
|
2019-01-10 12:44:57 +11:00
|
|
|
|
2020-11-18 17:40:23 +00:00
|
|
|
return builder;
|
2018-07-20 15:45:01 +02:00
|
|
|
}
|
|
|
|
|
|
2019-01-11 14:30:04 +11:00
|
|
|
/// <summary>
|
|
|
|
|
/// Creates an instance of PackagesRepository for either the ICreatedPackagesRepository or the IInstalledPackagesRepository
|
|
|
|
|
/// </summary>
|
2020-10-30 11:16:17 +00:00
|
|
|
private static PackagesRepository CreatePackageRepository(IServiceProvider factory, string packageRepoFileName)
|
2019-01-18 10:02:47 +01:00
|
|
|
=> new PackagesRepository(
|
2020-10-27 10:53:01 +00:00
|
|
|
factory.GetRequiredService<IContentService>(),
|
|
|
|
|
factory.GetRequiredService<IContentTypeService>(),
|
|
|
|
|
factory.GetRequiredService<IDataTypeService>(),
|
|
|
|
|
factory.GetRequiredService<IFileService>(),
|
|
|
|
|
factory.GetRequiredService<IMacroService>(),
|
|
|
|
|
factory.GetRequiredService<ILocalizationService>(),
|
|
|
|
|
factory.GetRequiredService<IHostingEnvironment>(),
|
|
|
|
|
factory.GetRequiredService<IEntityXmlSerializer>(),
|
|
|
|
|
factory.GetRequiredService<ILoggerFactory>(),
|
|
|
|
|
factory.GetRequiredService<IUmbracoVersion>(),
|
|
|
|
|
factory.GetRequiredService<IOptions<GlobalSettings>>(),
|
2020-12-16 22:26:47 +01:00
|
|
|
factory.GetRequiredService<IMediaService>(),
|
|
|
|
|
factory.GetRequiredService<IMediaTypeService>(),
|
2019-01-11 14:30:04 +11:00
|
|
|
packageRepoFileName);
|
|
|
|
|
|
2020-10-30 11:16:17 +00:00
|
|
|
private static LocalizedTextServiceFileSources SourcesFactory(IServiceProvider container)
|
2018-07-20 15:45:01 +02:00
|
|
|
{
|
2020-10-27 10:53:01 +00:00
|
|
|
var hostingEnvironment = container.GetRequiredService<IHostingEnvironment>();
|
|
|
|
|
var globalSettings = container.GetRequiredService<IOptions<GlobalSettings>>().Value;
|
2020-12-24 11:46:17 +11:00
|
|
|
var mainLangFolder = new DirectoryInfo(hostingEnvironment.MapPathContentRoot(WebPath.Combine(globalSettings.UmbracoPath, "config", "lang")));
|
2020-05-25 14:50:51 +02:00
|
|
|
var appPlugins = new DirectoryInfo(hostingEnvironment.MapPathContentRoot(Constants.SystemDirectories.AppPlugins));
|
2020-12-24 11:46:17 +11: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()
|
2019-08-20 10:58:35 +02:00
|
|
|
.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));
|
|
|
|
|
|
2020-12-24 11:46:17 +11:00
|
|
|
// user defined langs that overwrite the default, these should not be used by plugin creators
|
2018-07-20 15:45:01 +02:00
|
|
|
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(
|
2020-10-27 10:53:01 +00:00
|
|
|
container.GetRequiredService<ILogger<LocalizedTextServiceFileSources>>(),
|
|
|
|
|
container.GetRequiredService<AppCaches>(),
|
2018-07-20 15:45:01 +02:00
|
|
|
mainLangFolder,
|
|
|
|
|
pluginLangFolders.Concat(userLangFolders));
|
2018-07-20 09:49:05 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|