public static IServiceCollection AddStorageManager(this IServiceCollection services, StorageOptions options, IHealthChecksBuilder healthChecksBuilder = null) { if (options.UsedAzure()) { services.AddAzureBlobStorageManager(options.Azure); if (healthChecksBuilder != null) { healthChecksBuilder.AddAzureBlobStorage( options.Azure.ConnectionString, containerName: options.Azure.Container, name: "Storage (Azure Blob)", failureStatus: HealthStatus.Degraded); } } else if (options.UsedAmazon()) { services.AddAmazonS3StorageManager(options.Amazon); if (healthChecksBuilder != null) { healthChecksBuilder.AddS3( s3 => { s3.AccessKey = options.Amazon.AccessKeyID; s3.SecretKey = options.Amazon.SecretAccessKey; s3.BucketName = options.Amazon.BucketName; s3.S3Config = new AmazonS3Config { RegionEndpoint = RegionEndpoint.GetBySystemName(options.Amazon.RegionEndpoint), }; }, name: "Storage (Amazon S3)", failureStatus: HealthStatus.Degraded); } } else if (options.UsedLocal()) { services.AddLocalStorageManager(options.Local); if (healthChecksBuilder != null) { healthChecksBuilder.AddFilePathWrite(options.Local.Path, name: "Storage (Local Directory)", failureStatus: HealthStatus.Degraded); } } else { services.AddFakeStorageManager(); } return(services); }
public static IServiceCollection AddStorageModule(this IServiceCollection services, StorageOptions storageOptions, MessageBrokerOptions messageBrokerOptions, string connectionString, string migrationsAssembly = "") { services.AddDbContext <StorageDbContext>(options => options.UseSqlServer(connectionString, sql => { if (!string.IsNullOrEmpty(migrationsAssembly)) { sql.MigrationsAssembly(migrationsAssembly); } })) .AddScoped <IRepository <FileEntry, Guid>, Repository <FileEntry, Guid> >(); DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly(), services); services.AddMessageHandlers(Assembly.GetExecutingAssembly()); if (storageOptions.UsedAzure()) { services.AddSingleton <IFileStorageManager>(new AzureBlobStorageManager(storageOptions.Azure.ConnectionString, storageOptions.Azure.Container)); } else if (storageOptions.UsedAmazon()) { services.AddSingleton <IFileStorageManager>( new AmazonS3StorageManager( storageOptions.Amazon.AccessKeyID, storageOptions.Amazon.SecretAccessKey, storageOptions.Amazon.BucketName, storageOptions.Amazon.RegionEndpoint)); } else if (storageOptions.UsedLocal()) { services.AddSingleton <IFileStorageManager>(new LocalFileStorageManager(storageOptions.Local.Path)); } else if (storageOptions.UsedFake()) { services.AddSingleton <IFileStorageManager>(new FakeStorageManager()); } services.AddMessageBusSender <FileUploadedEvent>(messageBrokerOptions); services.AddMessageBusSender <FileDeletedEvent>(messageBrokerOptions); return(services); }
public static IServiceCollection AddStorageModule(this IServiceCollection services, StorageOptions storageOptions, MessageBrokerOptions messageBrokerOptions, string connectionString, string migrationsAssembly = "") { services.AddDbContext <StorageDbContext>(options => options.UseSqlServer(connectionString, sql => { if (!string.IsNullOrEmpty(migrationsAssembly)) { sql.MigrationsAssembly(migrationsAssembly); } })) .AddScoped <IRepository <FileEntry, Guid>, Repository <FileEntry, Guid> >(); DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly(), services); services.AddMessageHandlers(Assembly.GetExecutingAssembly()); if (storageOptions.UsedAzure()) { services.AddSingleton <IFileStorageManager>(new AzureBlobStorageManager(storageOptions.Azure.ConnectionString, storageOptions.Azure.Container)); } else if (storageOptions.UsedAmazon()) { services.AddSingleton <IFileStorageManager>( new AmazonS3StorageManager( storageOptions.Amazon.AccessKeyID, storageOptions.Amazon.SecretAccessKey, storageOptions.Amazon.BucketName, storageOptions.Amazon.RegionEndpoint)); } else { services.AddSingleton <IFileStorageManager>(new LocalFileStorageManager(storageOptions.Local.Path)); } if (messageBrokerOptions.UsedRabbitMQ()) { services.AddSingleton <IMessageSender <FileUploadedEvent> >(new RabbitMQSender <FileUploadedEvent>(new RabbitMQSenderOptions { HostName = messageBrokerOptions.RabbitMQ.HostName, UserName = messageBrokerOptions.RabbitMQ.UserName, Password = messageBrokerOptions.RabbitMQ.Password, ExchangeName = messageBrokerOptions.RabbitMQ.ExchangeName, RoutingKey = messageBrokerOptions.RabbitMQ.RoutingKey_FileUploaded, })); services.AddSingleton <IMessageSender <FileDeletedEvent> >(new RabbitMQSender <FileDeletedEvent>(new RabbitMQSenderOptions { HostName = messageBrokerOptions.RabbitMQ.HostName, UserName = messageBrokerOptions.RabbitMQ.UserName, Password = messageBrokerOptions.RabbitMQ.Password, ExchangeName = messageBrokerOptions.RabbitMQ.ExchangeName, RoutingKey = messageBrokerOptions.RabbitMQ.RoutingKey_FileDeleted, })); } else if (messageBrokerOptions.UsedKafka()) { services.AddSingleton <IMessageSender <FileUploadedEvent> >(new KafkaSender <FileUploadedEvent>( messageBrokerOptions.Kafka.BootstrapServers, messageBrokerOptions.Kafka.Topic_FileUploaded)); services.AddSingleton <IMessageSender <FileDeletedEvent> >(new KafkaSender <FileDeletedEvent>( messageBrokerOptions.Kafka.BootstrapServers, messageBrokerOptions.Kafka.Topic_FileDeleted)); } else if (messageBrokerOptions.UsedAzureQueue()) { services.AddSingleton <IMessageSender <FileUploadedEvent> >(new AzureQueueSender <FileUploadedEvent>( connectionString: messageBrokerOptions.AzureQueue.ConnectionString, queueName: messageBrokerOptions.AzureQueue.QueueName_FileUploaded)); services.AddSingleton <IMessageSender <FileDeletedEvent> >(new AzureQueueSender <FileDeletedEvent>( connectionString: messageBrokerOptions.AzureQueue.ConnectionString, queueName: messageBrokerOptions.AzureQueue.QueueName_FileDeleted)); } else if (messageBrokerOptions.UsedAzureServiceBus()) { services.AddSingleton <IMessageSender <FileUploadedEvent> >(new AzureServiceBusSender <FileUploadedEvent>( connectionString: messageBrokerOptions.AzureServiceBus.ConnectionString, queueName: messageBrokerOptions.AzureServiceBus.QueueName_FileUploaded)); services.AddSingleton <IMessageSender <FileDeletedEvent> >(new AzureServiceBusSender <FileDeletedEvent>( connectionString: messageBrokerOptions.AzureServiceBus.ConnectionString, queueName: messageBrokerOptions.AzureServiceBus.QueueName_FileDeleted)); } else if (messageBrokerOptions.UsedAzureEventGrid()) { services.AddSingleton <IMessageSender <FileUploadedEvent> >(new AzureEventGridSender <FileUploadedEvent>( messageBrokerOptions.AzureEventGrid.DomainEndpoint, messageBrokerOptions.AzureEventGrid.DomainKey, messageBrokerOptions.AzureEventGrid.Topic_FileUploaded)); services.AddSingleton <IMessageSender <FileDeletedEvent> >(new AzureEventGridSender <FileDeletedEvent>( messageBrokerOptions.AzureEventGrid.DomainEndpoint, messageBrokerOptions.AzureEventGrid.DomainKey, messageBrokerOptions.AzureEventGrid.Topic_FileDeleted)); } else if (messageBrokerOptions.UsedAzureEventHub()) { services.AddSingleton <IMessageSender <FileUploadedEvent> >(new AzureEventHubSender <FileUploadedEvent>( messageBrokerOptions.AzureEventHub.ConnectionString, messageBrokerOptions.AzureEventHub.Hub_FileUploaded)); services.AddSingleton <IMessageSender <FileDeletedEvent> >(new AzureEventHubSender <FileDeletedEvent>( messageBrokerOptions.AzureEventHub.ConnectionString, messageBrokerOptions.AzureEventHub.Hub_FileDeleted)); } return(services); }