// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschraenkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Options; using NodaTime; using Squidex.Areas.Api.Controllers.Contents.Generator; using Squidex.Areas.Api.Controllers.News; using Squidex.Areas.Api.Controllers.News.Service; using Squidex.Areas.Api.Controllers.UI; using Squidex.Caching; using Squidex.Domain.Apps.Core.Scripting; using Squidex.Domain.Apps.Core.Scripting.Extensions; using Squidex.Domain.Apps.Core.Tags; using Squidex.Domain.Apps.Core.Templates; using Squidex.Domain.Apps.Core.Templates.Extensions; using Squidex.Domain.Apps.Entities.Contents.Counter; using Squidex.Domain.Apps.Entities.Rules.UsageTracking; using Squidex.Domain.Apps.Entities.Tags; using Squidex.Infrastructure; using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.EventSourcing.Grains; using Squidex.Infrastructure.Log; using Squidex.Infrastructure.Orleans; using Squidex.Infrastructure.Translations; using Squidex.Infrastructure.UsageTracking; using Squidex.Pipeline.Robots; using Squidex.Shared; using Squidex.Text.Translations; using Squidex.Text.Translations.GoogleCloud; using Squidex.Web; using Squidex.Web.Pipeline; namespace Squidex.Config.Domain { public static class InfrastructureServices { public static void AddSquidexInfrastructure(this IServiceCollection services, IConfiguration config) { services.Configure(config, "exposedConfiguration"); services.Configure(config, "caching:replicated"); services.Configure(config, "scripting"); services.AddReplicatedCache(); services.AddAsyncLocalCache(); services.AddBackgroundCache(); services.AddSingletonAs(_ => SystemClock.Instance) .As(); services.AddSingletonAs>() .AsSelf(); services.AddSingletonAs() .AsOptional(); services.AddSingletonAs() .AsSelf(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As().As(); services.AddSingletonAs() .As().As(); services.AddSingletonAs() .As().As(); services.AddSingletonAs() .As().As(); services.AddSingletonAs() .As().As(); services.AddSingletonAs() .AsOptional(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingleton(DomainObjectGrainFormatter.Format); } public static void AddSquidexUsageTracking(this IServiceCollection services, IConfiguration config) { services.Configure(config, "usage"); services.AddSingletonAs(c => new CachingUsageTracker( c.GetRequiredService(), c.GetRequiredService())) .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .AsSelf(); services.AddSingletonAs>() .AsSelf(); } public static void AddSquidexTranslation(this IServiceCollection services, IConfiguration config) { services.Configure(config, "translations:googleCloud"); services.Configure(config, "translations:deepL"); services.Configure(config, "languages"); services.AddSingletonAs() .AsSelf(); services.AddSingletonAs(c => new DeepLTranslationService(c.GetRequiredService>().Value)) .As(); services.AddSingletonAs(c => new GoogleCloudTranslationService(c.GetRequiredService>().Value)) .As(); services.AddSingletonAs() .As(); } public static void AddSquidexLocalization(this IServiceCollection services) { var translator = new ResourcesLocalizer(Texts.ResourceManager); T.Setup(translator); services.AddSingletonAs(c => translator) .As(); } public static void AddSquidexControllerServices(this IServiceCollection services, IConfiguration config) { services.Configure(config, "robots"); services.Configure(config, "caching"); services.Configure(config, "ui"); services.Configure(config, "news"); services.AddSingletonAs() .AsSelf(); services.AddSingletonAs() .AsSelf(); } } }