// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschränkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using System; using GraphQL; using GraphQL.DataLoader; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Migrate_01; using Migrate_01.Migrations; using Orleans; using Squidex.Areas.Api.Controllers.UI; using Squidex.Domain.Apps.Core.Apps; using Squidex.Domain.Apps.Core.ConvertContent; using Squidex.Domain.Apps.Core.HandleRules; using Squidex.Domain.Apps.Core.Scripting; using Squidex.Domain.Apps.Core.Tags; using Squidex.Domain.Apps.Entities; using Squidex.Domain.Apps.Entities.Apps; using Squidex.Domain.Apps.Entities.Apps.Commands; using Squidex.Domain.Apps.Entities.Apps.Indexes; using Squidex.Domain.Apps.Entities.Apps.Invitation; using Squidex.Domain.Apps.Entities.Apps.Templates; using Squidex.Domain.Apps.Entities.Assets; using Squidex.Domain.Apps.Entities.Assets.Commands; using Squidex.Domain.Apps.Entities.Backup; using Squidex.Domain.Apps.Entities.Comments; using Squidex.Domain.Apps.Entities.Comments.Commands; using Squidex.Domain.Apps.Entities.Contents; using Squidex.Domain.Apps.Entities.Contents.Commands; using Squidex.Domain.Apps.Entities.Contents.Edm; using Squidex.Domain.Apps.Entities.Contents.GraphQL; using Squidex.Domain.Apps.Entities.Contents.Text; using Squidex.Domain.Apps.Entities.History; using Squidex.Domain.Apps.Entities.History.Notifications; using Squidex.Domain.Apps.Entities.Rules; using Squidex.Domain.Apps.Entities.Rules.Commands; using Squidex.Domain.Apps.Entities.Rules.Indexes; using Squidex.Domain.Apps.Entities.Rules.UsageTracking; using Squidex.Domain.Apps.Entities.Schemas; using Squidex.Domain.Apps.Entities.Schemas.Commands; using Squidex.Domain.Apps.Entities.Schemas.Indexes; using Squidex.Domain.Apps.Entities.Tags; using Squidex.Infrastructure.Assets; using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Email; using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.Migrations; using Squidex.Infrastructure.Orleans; using Squidex.Web; using Squidex.Web.CommandMiddlewares; using Squidex.Web.Services; namespace Squidex.Config.Domain { public static class EntitiesServices { public static void AddMyEntitiesServices(this IServiceCollection services, IConfiguration config) { var exposeSourceUrl = config.GetOptionalValue("assetStore:exposeSourceUrl", true); services.AddSingletonAs(c => new UrlGenerator( c.GetRequiredService>(), c.GetRequiredService(), exposeSourceUrl)) .As().As().As().As(); services.AddSingletonAs() .As().As(); services.AddSingletonAs() .As().As(); services.AddSingletonAs(x => new FuncDependencyResolver(t => x.GetRequiredService(t))) .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .AsSelf(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .AsOptional(); services.AddSingletonAs() .AsSelf(); services.AddSingletonAs() .AsSelf(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As().As(); services.AddSingletonAs() .As>(); services.AddSingletonAs() .As>(); services.AddSingletonAs() .AsOptional(); services.AddSingletonAs>() .AsSelf(); services.AddSingletonAs>() .AsSelf(); services.AddCommandPipeline(); services.AddBackupHandlers(); services.AddSingleton>(DomainObjectGrainFormatter.Format); services.AddSingleton(c => { var uiOptions = c.GetRequiredService>(); var result = new InitialPatterns(); foreach (var pattern in uiOptions.Value.RegexSuggestions) { if (!string.IsNullOrWhiteSpace(pattern.Key) && !string.IsNullOrWhiteSpace(pattern.Value)) { result[Guid.NewGuid()] = new AppPattern(pattern.Key, pattern.Value); } } return result; }); var emailOptions = config.GetSection("email:smtp").Get(); if (emailOptions.IsConfigured()) { services.AddSingleton(Options.Create(emailOptions)); services.Configure( config.GetSection("email:notifications")); services.AddSingletonAs() .As(); services.AddSingletonAs() .AsOptional(); } else { services.AddSingletonAs() .AsOptional(); } services.AddSingletonAs() .As(); } private static void AddCommandPipeline(this IServiceCollection services) { services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs>() .As(); services.AddSingletonAs>() .As(); services.AddSingletonAs>() .As(); services.AddSingletonAs>() .As(); services.AddSingletonAs>() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); services.AddSingletonAs() .As(); } private static void AddBackupHandlers(this IServiceCollection services) { services.AddTransientAs() .As(); services.AddTransientAs() .As(); services.AddTransientAs() .As(); services.AddTransientAs() .As(); services.AddTransientAs() .As(); } public static void AddMyMigrationServices(this IServiceCollection services) { services.AddSingletonAs() .AsSelf(); services.AddTransientAs() .AsSelf(); services.AddTransientAs() .AsSelf(); services.AddTransientAs() .As(); services.AddTransientAs() .As(); services.AddTransientAs() .As(); services.AddTransientAs() .As(); services.AddTransientAs() .As(); services.AddTransientAs() .As(); services.AddTransientAs() .As(); services.AddTransientAs() .As(); services.AddTransientAs() .As(); services.AddTransientAs() .As(); services.AddTransientAs() .As(); services.AddTransientAs() .As(); services.AddTransientAs() .As(); } } }