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.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); services.AddScoped <ICurrentUser, CurrentWebUser>(); services.AddStorageManager(storageOptions); services.AddMessageBusSender <FileUploadedEvent>(messageBrokerOptions) .AddMessageBusSender <FileDeletedEvent>(messageBrokerOptions) .AddMessageBusReceiver <FileUploadedEvent>(messageBrokerOptions) .AddMessageBusReceiver <FileDeletedEvent>(messageBrokerOptions); return(services); }
public static IServiceCollection AddProductModule(this IServiceCollection services, AppSettings appSettings) { services.AddDbContext <ProductDbContext>(options => options.UseSqlServer(appSettings.ConnectionStrings.ClassifiedAds, sql => { if (!string.IsNullOrEmpty(appSettings.ConnectionStrings.MigrationsAssembly)) { sql.MigrationsAssembly(appSettings.ConnectionStrings.MigrationsAssembly); } })); services .AddScoped <IRepository <Product, Guid>, Repository <Product, Guid> >() .AddScoped(typeof(IProductRepository), typeof(ProductRepository)) .AddScoped <IRepository <AuditLogEntry, Guid>, Repository <AuditLogEntry, Guid> >() .AddScoped <IRepository <EventLog, long>, Repository <EventLog, long> >(); DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly(), services); services.AddMessageHandlers(Assembly.GetExecutingAssembly()); services.AddAuthorizationPolicies(Assembly.GetExecutingAssembly()); services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); services.AddScoped <ICurrentUser, CurrentWebUser>(); services.AddScoped(typeof(ICsvReader <>), typeof(CsvReader <>)); services.AddScoped(typeof(ICsvWriter <>), typeof(CsvWriter <>)); services.AddMessageBusSender <AuditLogCreatedEvent>(appSettings.MessageBroker); return(services); }
public static IServiceCollection AddStorageModule(this IServiceCollection services, AppSettings appSettings) { services.AddDbContext <StorageDbContext>(options => options.UseSqlServer(appSettings.ConnectionStrings.ClassifiedAds, sql => { if (!string.IsNullOrEmpty(appSettings.ConnectionStrings.MigrationsAssembly)) { sql.MigrationsAssembly(appSettings.ConnectionStrings.MigrationsAssembly); } })) .AddScoped <IRepository <FileEntry, Guid>, Repository <FileEntry, Guid> >(); DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly(), services); services.AddMessageHandlers(Assembly.GetExecutingAssembly()); services.AddAuthorizationPolicies(Assembly.GetExecutingAssembly()); services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); services.AddScoped <ICurrentUser, CurrentWebUser>(); services.AddStorageManager(appSettings.Storage); services.AddMessageBusSender <FileUploadedEvent>(appSettings.MessageBroker) .AddMessageBusSender <FileDeletedEvent>(appSettings.MessageBroker) .AddMessageBusReceiver <FileUploadedEvent>(appSettings.MessageBroker) .AddMessageBusReceiver <FileDeletedEvent>(appSettings.MessageBroker); return(services); }
public static IServiceCollection AddConfigurationModule(this IServiceCollection services, ConfigurationModuleOptions moduleOptions) { services.Configure <ConfigurationModuleOptions>(op => { op.ConnectionStrings = moduleOptions.ConnectionStrings; op.Certificates = moduleOptions.Certificates; }); services.AddDbContext <ConfigurationDbContext>(options => options.UseSqlServer(moduleOptions.ConnectionStrings.Default, sql => { if (!string.IsNullOrEmpty(moduleOptions.ConnectionStrings.MigrationsAssembly)) { sql.MigrationsAssembly(moduleOptions.ConnectionStrings.MigrationsAssembly); } })) .AddScoped <IRepository <ConfigurationEntry, Guid>, Repository <ConfigurationEntry, Guid> >(); DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly(), services); services.AddMessageHandlers(Assembly.GetExecutingAssembly()); services.AddAuthorizationPolicies(Assembly.GetExecutingAssembly()); return(services); }
public static IServiceCollection AddConfigurationModule(this IServiceCollection services, Action <ConfigurationModuleOptions> configureOptions) { var settings = new ConfigurationModuleOptions(); configureOptions(settings); services.Configure(configureOptions); services.AddDbContext <ConfigurationDbContext>(options => options.UseSqlServer(settings.ConnectionStrings.Default, sql => { if (!string.IsNullOrEmpty(settings.ConnectionStrings.MigrationsAssembly)) { sql.MigrationsAssembly(settings.ConnectionStrings.MigrationsAssembly); } })) .AddScoped <IRepository <ConfigurationEntry, Guid>, Repository <ConfigurationEntry, Guid> >(); DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly(), services); services.AddMessageHandlers(Assembly.GetExecutingAssembly()); services.AddAuthorizationPolicies(Assembly.GetExecutingAssembly()); services.AddScoped <IExcelReader <List <ConfigurationEntry> >, ConfigurationEntryExcelReader>(); services.AddScoped <IExcelWriter <List <ConfigurationEntry> >, ConfigurationEntryExcelWriter>(); return(services); }
public static IServiceCollection AddNotificationModule(this IServiceCollection services, MessageBrokerOptions messageBrokerOptions, NotificationOptions notificationOptions, string connectionString, string migrationsAssembly = "") { services .AddDbContext <NotificationDbContext>(options => options.UseSqlServer(connectionString, sql => { if (!string.IsNullOrEmpty(migrationsAssembly)) { sql.MigrationsAssembly(migrationsAssembly); } })) .AddScoped <IRepository <EmailMessage, Guid>, Repository <EmailMessage, Guid> >() .AddScoped <IRepository <SmsMessage, Guid>, Repository <SmsMessage, Guid> >() .AddScoped(typeof(IEmailMessageRepository), typeof(EmailMessageRepository)) .AddScoped(typeof(ISmsMessageRepository), typeof(SmsMessageRepository)) .AddScoped <IEmailMessageService, EmailMessageService>(); services .AddScoped <EmailMessageService>() .AddScoped <SmsMessageService>(); DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly(), services); services.AddMessageHandlers(Assembly.GetExecutingAssembly()); services .AddMessageBusSender <EmailMessageCreatedEvent>(messageBrokerOptions) .AddMessageBusSender <SmsMessageCreatedEvent>(messageBrokerOptions); services.AddNotificationServices(notificationOptions); return(services); }
public static IServiceCollection AddProductModule(this IServiceCollection services, string connectionString, string migrationsAssembly = "") { services.AddDbContext <ProductDbContext>(options => options.UseSqlServer(connectionString, sql => { if (!string.IsNullOrEmpty(migrationsAssembly)) { sql.MigrationsAssembly(migrationsAssembly); } })); services .AddScoped <IRepository <Product, Guid>, Repository <Product, Guid> >() .AddScoped(typeof(IProductRepository), typeof(ProductRepository)); DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly(), services); services.AddMessageHandlers(Assembly.GetExecutingAssembly()); services.AddAuthorizationPolicies(Assembly.GetExecutingAssembly()); services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); services.AddScoped <ICurrentUser, CurrentWebUser>(); return(services); }
public static IServiceCollection AddStorageModule(this IServiceCollection services, StorageModuleOptions moduleOptions) { services.Configure <StorageModuleOptions>(op => { op.ConnectionStrings = moduleOptions.ConnectionStrings; op.Storage = moduleOptions.Storage; op.MessageBroker = moduleOptions.MessageBroker; }); services.AddDbContext <StorageDbContext>(options => options.UseSqlServer(moduleOptions.ConnectionStrings.Default, sql => { if (!string.IsNullOrEmpty(moduleOptions.ConnectionStrings.MigrationsAssembly)) { sql.MigrationsAssembly(moduleOptions.ConnectionStrings.MigrationsAssembly); } })) .AddScoped <IRepository <FileEntry, Guid>, Repository <FileEntry, Guid> >(); DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly(), services); services.AddMessageHandlers(Assembly.GetExecutingAssembly()); services.AddStorageManager(moduleOptions.Storage); services.AddMessageBusSender <FileUploadedEvent>(moduleOptions.MessageBroker); services.AddMessageBusSender <FileDeletedEvent>(moduleOptions.MessageBroker); services.AddAuthorizationPolicies(Assembly.GetExecutingAssembly()); return(services); }
public static IServiceCollection AddNotificationModule(this IServiceCollection services, AppSettings appSettings) { services .AddDbContext <NotificationDbContext>(options => options.UseSqlServer(appSettings.ConnectionStrings.ClassifiedAds, sql => { if (!string.IsNullOrEmpty(appSettings.ConnectionStrings.MigrationsAssembly)) { sql.MigrationsAssembly(appSettings.ConnectionStrings.MigrationsAssembly); } })) .AddScoped <IRepository <EmailMessage, Guid>, Repository <EmailMessage, Guid> >() .AddScoped <IRepository <SmsMessage, Guid>, Repository <SmsMessage, Guid> >() .AddScoped(typeof(IEmailMessageRepository), typeof(EmailMessageRepository)) .AddScoped(typeof(ISmsMessageRepository), typeof(SmsMessageRepository)) .AddScoped <IEmailMessageService, EmailMessageService>(); services .AddScoped <EmailMessageService>() .AddScoped <SmsMessageService>(); DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly(), services); services.AddMessageHandlers(Assembly.GetExecutingAssembly()); services.AddNotificationServices(appSettings.Notification); return(services); }
public static IServiceCollection AddApplicationServices(this IServiceCollection services, Action <Type, Type, ServiceLifetime> configureInterceptor = null) { DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly(), services); services .AddSingleton <IDomainEvents, DomainEvents>() .AddScoped(typeof(ICrudService <>), typeof(CrudService <>)) .AddScoped <IUserService, UserService>() .AddScoped <IProductService, ProductService>() .AddScoped <EmailMessageService>() .AddScoped <SmsMessageService>(); if (configureInterceptor != null) { var aggregateRootTypes = typeof(AggregateRoot <>).Assembly.GetTypes().Where(x => x.BaseType == typeof(AggregateRoot <Guid>)).ToList(); foreach (var type in aggregateRootTypes) { configureInterceptor(typeof(ICrudService <>).MakeGenericType(type), typeof(CrudService <>).MakeGenericType(type), ServiceLifetime.Scoped); } configureInterceptor(typeof(IUserService), typeof(UserService), ServiceLifetime.Scoped); configureInterceptor(typeof(IProductService), typeof(ProductService), ServiceLifetime.Scoped); } return(services); }
public static IServiceCollection AddProductModule(this IServiceCollection services, Action <ProductModuleOptions> configureOptions) { var settings = new ProductModuleOptions(); configureOptions(settings); services.Configure(configureOptions); services.AddDbContext <ProductDbContext>(options => options.UseSqlServer(settings.ConnectionStrings.Default, sql => { if (!string.IsNullOrEmpty(settings.ConnectionStrings.MigrationsAssembly)) { sql.MigrationsAssembly(settings.ConnectionStrings.MigrationsAssembly); } })); services .AddScoped <IRepository <Product, Guid>, Repository <Product, Guid> >() .AddScoped(typeof(IProductRepository), typeof(ProductRepository)) .AddScoped <IRepository <AuditLogEntry, Guid>, Repository <AuditLogEntry, Guid> >() .AddScoped <IRepository <EventLog, long>, Repository <EventLog, long> >(); DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly(), services); services.AddMessageHandlers(Assembly.GetExecutingAssembly()); services.AddAuthorizationPolicies(Assembly.GetExecutingAssembly()); services.AddScoped(typeof(ICsvReader <>), typeof(CsvReader <>)); services.AddScoped(typeof(ICsvWriter <>), typeof(CsvWriter <>)); return(services); }
public static IServiceCollection AddApplicationServices(this IServiceCollection services) { DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly()); services .AddSingleton <IDomainEvents, DomainEvents>() .AddScoped(typeof(ICrudService <>), typeof(CrudService <>)) .AddScoped <IUserService, UserService>() .AddScoped <IProductService, ProductService>(); return(services); }
public static IServiceCollection AddStorageModule(this IServiceCollection services, string connectionString, string migrationsAssembly = "") { services.AddDbContext <StorageDbContext>(options => options.UseSqlServer(connectionString, sql => { if (!string.IsNullOrEmpty(migrationsAssembly)) { sql.MigrationsAssembly(migrationsAssembly); } })) .AddScoped(typeof(IRepository <,>), typeof(Repository <,>)) .AddScoped(typeof(ICrudService <>), typeof(CrudService <>)); DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly(), services); services.AddMessageHandlers(Assembly.GetExecutingAssembly()); return(services); }
public static IServiceCollection AddConfigurationModule(this IServiceCollection services, AppSettings appSettings) { services.AddDbContext <ConfigurationDbContext>(options => options.UseSqlServer(appSettings.ConnectionStrings.ClassifiedAds, sql => { if (!string.IsNullOrEmpty(appSettings.ConnectionStrings.MigrationsAssembly)) { sql.MigrationsAssembly(appSettings.ConnectionStrings.MigrationsAssembly); } })) .AddScoped <IRepository <ConfigurationEntry, Guid>, Repository <ConfigurationEntry, Guid> >(); DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly(), services); services.AddMessageHandlers(Assembly.GetExecutingAssembly()); services.AddAuthorizationPolicies(Assembly.GetExecutingAssembly()); 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 AddNotificationModule(this IServiceCollection services, NotificationModuleOptions moduleOptions) { services.Configure <NotificationModuleOptions>(op => { op.ConnectionStrings = moduleOptions.ConnectionStrings; op.MessageBroker = moduleOptions.MessageBroker; op.Notification = moduleOptions.Notification; }); services .AddDbContext <NotificationDbContext>(options => options.UseSqlServer(moduleOptions.ConnectionStrings.Default, sql => { if (!string.IsNullOrEmpty(moduleOptions.ConnectionStrings.MigrationsAssembly)) { sql.MigrationsAssembly(moduleOptions.ConnectionStrings.MigrationsAssembly); } })) .AddScoped <IRepository <EmailMessage, Guid>, Repository <EmailMessage, Guid> >() .AddScoped <IRepository <SmsMessage, Guid>, Repository <SmsMessage, Guid> >() .AddScoped(typeof(IEmailMessageRepository), typeof(EmailMessageRepository)) .AddScoped(typeof(ISmsMessageRepository), typeof(SmsMessageRepository)) .AddScoped <IEmailMessageService, EmailMessageService>(); services .AddScoped <EmailMessageService>() .AddScoped <SmsMessageService>(); DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly(), services); services.AddMessageHandlers(Assembly.GetExecutingAssembly()); services .AddMessageBusSender <EmailMessageCreatedEvent>(moduleOptions.MessageBroker) .AddMessageBusSender <SmsMessageCreatedEvent>(moduleOptions.MessageBroker); services.AddNotificationServices(moduleOptions.Notification); 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); }
public static void RegisterDomainEventHandlers(this IServiceProvider serviceProvider) { DomainEvents.RegisterHandlers(Assembly.GetExecutingAssembly(), serviceProvider); }