// ========================================================================== // MongoDbModule.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group // All rights reserved. // ========================================================================== using Autofac; using IdentityServer4.Stores; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.MongoDB; using Microsoft.Extensions.Options; using MongoDB.Driver; using Squidex.Infrastructure.CQRS.Events; using Squidex.Infrastructure.CQRS.EventStore; using Squidex.Read.Apps.Repositories; using Squidex.Read.History.Repositories; using Squidex.Read.Schemas.Repositories; using Squidex.Read.Users.Repositories; using Squidex.Store.MongoDb.Apps; using Squidex.Store.MongoDb.History; using Squidex.Store.MongoDb.Infrastructure; using Squidex.Store.MongoDb.Schemas; using Squidex.Store.MongoDb.Users; using Squidex.Store.MongoDb.Utils; namespace Squidex.Store.MongoDb { public class MongoDbModule : Module { protected override void Load(ContainerBuilder builder) { RefTokenSerializer.Register(); builder.Register(context => { var options = context.Resolve>().Value; var mongoDbClient = new MongoClient(options.ConnectionString); var mongoDatabase = mongoDbClient.GetDatabase(options.DatabaseName); return mongoDatabase; }).SingleInstance(); builder.Register>(context => { var usersCollection = context.Resolve().GetCollection("Identity_Users"); IndexChecks.EnsureUniqueIndexOnNormalizedEmail(usersCollection); IndexChecks.EnsureUniqueIndexOnNormalizedUserName(usersCollection); return new UserStore(usersCollection); }).SingleInstance(); builder.Register>(context => { var rolesCollection = context.Resolve().GetCollection("Identity_Roles"); IndexChecks.EnsureUniqueIndexOnNormalizedRoleName(rolesCollection); return new RoleStore(rolesCollection); }).SingleInstance(); builder.RegisterType() .As() .SingleInstance(); builder.RegisterType() .As() .SingleInstance(); builder.RegisterType() .As() .InstancePerLifetimeScope(); builder.RegisterType() .As() .As() .SingleInstance(); builder.RegisterType() .As() .As() .SingleInstance(); builder.RegisterType() .As() .As() .SingleInstance(); } } }