public Initialisor(IBus bus, IBus eventProcessingBus) { if (bus == null) { throw new ArgumentNullException("bus"); } _bus = bus; _eventProcessingBus = eventProcessingBus; _membershipService = new MembershipService(_bus); _s3Config = AwsConfigFactory.GetS3Config(); var awsClientFactory = new AwsClientFactory(); _fileStore = new S3FileStore(awsClientFactory); var dynamoDbConfig = AwsConfigFactory.GetDynamoDbConfig(); var mediaRepository = new MediaRepository(dynamoDbConfig, awsClientFactory); var uniquNameRepository = new UniqueNameRepository(dynamoDbConfig, awsClientFactory); _mediaService = new MediaService(_bus, mediaRepository, uniquNameRepository, _fileStore); _heartbeatService = new HeartbeatService(_bus, ServerSettings.ServerName); _heartbeatService.Start(); AutoMapperConfiguration.Configure(); }
public override void ConfigureServices(IServiceCollection services) { services.AddTransient <IConfigureOptions <MediaS3StorageOptions>, MediaS3StorageOptionsConfiguration>(); // Only replace default implementation if options are valid. var connectionString = _configuration[$"OrchardCore_Media_S3:{nameof(MediaS3StorageOptions.S3HostEndpoint)}"]; var containerName = _configuration[$"OrchardCore_Media_S3:{nameof(MediaS3StorageOptions.S3BucketName)}"]; var accessKey = _configuration[$"OrchardCore_Media_S3:{nameof(MediaS3StorageOptions.S3AccessKey)}"]; var secretKey = _configuration[$"OrchardCore_Media_S3:{nameof(MediaS3StorageOptions.S3SecretKey)}"]; if (!CheckOptions(connectionString, containerName, accessKey, secretKey, _logger)) { return; } // Register a media cache file provider. services.AddSingleton <IMediaFileStoreCacheFileProvider>(serviceProvider => { var hostingEnvironment = serviceProvider.GetRequiredService <IWebHostEnvironment>(); if (string.IsNullOrWhiteSpace(hostingEnvironment.WebRootPath)) { throw new Exception("The wwwroot folder for serving cache media files is missing."); } var mediaOptions = serviceProvider.GetRequiredService <IOptions <MediaOptions> >().Value; var shellOptions = serviceProvider.GetRequiredService <IOptions <ShellOptions> >(); var shellSettings = serviceProvider.GetRequiredService <ShellSettings>(); var logger = serviceProvider.GetRequiredService <ILogger <DefaultMediaFileStoreCacheFileProvider> >(); var mediaCachePath = GetMediaCachePath(hostingEnvironment, DefaultMediaFileStoreCacheFileProvider.AssetsCachePath, shellSettings); if (!Directory.Exists(mediaCachePath)) { Directory.CreateDirectory(mediaCachePath); } return(new DefaultMediaFileStoreCacheFileProvider(logger, mediaOptions.AssetsRequestPath, mediaCachePath)); }); // Replace the default media file provider with the media cache file provider. services.Replace(ServiceDescriptor.Singleton <IMediaFileProvider>(serviceProvider => serviceProvider.GetRequiredService <IMediaFileStoreCacheFileProvider>())); // Register the media cache file provider as a file store cache provider. services.AddSingleton <IMediaFileStoreCache>(serviceProvider => serviceProvider.GetRequiredService <IMediaFileStoreCacheFileProvider>()); // Replace the default media file store with a blob file store. services.Replace(ServiceDescriptor.Singleton <IMediaFileStore>(serviceProvider => { var mediaS3StorageOptions = serviceProvider.GetRequiredService <IOptions <MediaS3StorageOptions> >().Value; var shellOptions = serviceProvider.GetRequiredService <IOptions <ShellOptions> >(); var shellSettings = serviceProvider.GetRequiredService <ShellSettings>(); var mediaOptions = serviceProvider.GetRequiredService <IOptions <MediaOptions> >().Value; var clock = serviceProvider.GetRequiredService <IClock>(); var contentTypeProvider = serviceProvider.GetRequiredService <IContentTypeProvider>(); var mediaEventHandlers = serviceProvider.GetServices <IMediaEventHandler>(); var mediaCreatingEventHandlers = serviceProvider.GetServices <IMediaCreatingEventHandler>(); var logger = serviceProvider.GetRequiredService <ILogger <DefaultMediaFileStore> >(); var fileStore = new S3FileStore(mediaS3StorageOptions, clock, contentTypeProvider); var mediaPath = GetMediaPath(shellOptions.Value, shellSettings, mediaOptions.AssetsPath); var mediaUrlBase = "/" + fileStore.Combine(shellSettings.RequestUrlPrefix, mediaOptions.AssetsRequestPath); var originalPathBase = serviceProvider.GetRequiredService <IHttpContextAccessor>() .HttpContext?.Features.Get <ShellContextFeature>()?.OriginalPathBase ?? null; if (originalPathBase.HasValue) { mediaUrlBase = fileStore.Combine(originalPathBase.Value, mediaUrlBase); } return(new DefaultMediaFileStore(fileStore, mediaUrlBase, mediaOptions.CdnBaseUrl, mediaEventHandlers, mediaCreatingEventHandlers, logger)); })); services.AddSingleton <IMediaEventHandler, DefaultMediaFileStoreCacheEventHandler>(); services.AddScoped <IModularTenantEvents, CreateMediaBucketEvent>(); }