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);
        }
        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);
        }
Ejemplo n.º 3
0
        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());

            services.AddStorageManager(storageOptions);

            services.AddMessageBusSender <FileUploadedEvent>(messageBrokerOptions);
            services.AddMessageBusSender <FileDeletedEvent>(messageBrokerOptions);

            return(services);
        }
        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);
        }