// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschränkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using MongoDB.Driver; using MongoDB.Driver.GridFS; using Squidex.Infrastructure; using Squidex.Infrastructure.Assets; using Squidex.Infrastructure.Assets.ImageSharp; using Squidex.Infrastructure.Log; namespace Squidex.Config.Domain { public static class AssetServices { public static void AddMyAssetServices(this IServiceCollection services, IConfiguration config) { config.ConfigureByOption("assetStore:type", new Options { ["Default"] = () => { services.AddSingletonAs() .AsOptional(); }, ["Folder"] = () => { var path = config.GetRequiredValue("assetStore:folder:path"); services.AddSingletonAs(c => new FolderAssetStore(path, c.GetRequiredService())) .AsOptional(); }, ["GoogleCloud"] = () => { var bucketName = config.GetRequiredValue("assetStore:googleCloud:bucket"); services.AddSingletonAs(c => new GoogleCloudAssetStore(bucketName)) .AsOptional(); }, ["AzureBlob"] = () => { var connectionString = config.GetRequiredValue("assetStore:azureBlob:connectionString"); var containerName = config.GetRequiredValue("assetStore:azureBlob:containerName"); services.AddSingletonAs(c => new AzureBlobAssetStore(connectionString, containerName)) .AsOptional(); }, ["MongoDb"] = () => { var mongoConfiguration = config.GetRequiredValue("assetStore:mongoDb:configuration"); var mongoDatabaseName = config.GetRequiredValue("assetStore:mongoDb:database"); var mongoGridFsBucketName = config.GetRequiredValue("assetStore:mongoDb:bucket"); services.AddSingletonAs(c => { var mongoClient = Singletons.GetOrAdd(mongoConfiguration, s => new MongoClient(s)); var mongoDatabase = mongoClient.GetDatabase(mongoDatabaseName); var gridFsbucket = new GridFSBucket(mongoDatabase, new GridFSBucketOptions { BucketName = mongoGridFsBucketName }); return new MongoGridFsAssetStore(gridFsbucket); }) .AsOptional(); } }); services.AddSingletonAs() .As(); } } }