示例#1
0
        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();
        }
示例#2
0
        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>();
        }