public static async Task Main(string[] args) { var builder = new HostBuilder(); var environmentConfiguration = new ConfigurationBuilder() .AddEnvironmentVariables() .Build(); var environmentName = environmentConfiguration["ASPNETCORE_ENVIRONMENT"]; _configuration = new ConfigurationBuilder() .SetBasePath(Path.Combine(AppContext.BaseDirectory)) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{environmentName}.json", true, false) .AddEnvironmentVariables() .AddCommandLine(args) .Build(); builder .ConfigureServices(services => { var rabbitMqSettings = _configuration.GetSection("RabbitMQSettings"); ConfigureSerilog(services); services.AddMediatR(typeof(MessageEventHandler)); services.AddScoped <IRequestHandler <MessageEvent>, MessageEventHandler>(); services.AddScoped <IHandler, Handler>(); services.AddSingleton <IMemorySubscriptionManager, MemorySubscriptionManager>(); services.AddSingleton <IMessageIntegrationEventService, MessageIntegrationEventService>(); services.AddSingleton <IRabbitMqConnection>(i => new RabbitMqConnection(rabbitMqSettings["RabbitMqHost"], rabbitMqSettings["RabbitMqUser"], rabbitMqSettings["RabbitMqPassword"], rabbitMqSettings["RabbitMqRetryAttempts"])); services.AddScoped <MessageEventHandler>(); services.AddSingleton <IEventBusRabbitMq, EventBusRabbitMq>(serviceProvider => { var integration = new EventBusRabbitMq(serviceProvider, ApplicationName, rabbitMqSettings["RabbitMqQueueName"], rabbitMqSettings["RabbitMqExchangeName"], rabbitMqSettings["RabbitMqExchangeType"]); integration.Subscribe <MessageEvent, MessageEventHandler>(); return(integration); }); services.AddHostedService <Functions>(); }); var host = builder .UseConsoleLifetime() .Build(); using (host) { await host.RunAsync(); } }
public static IServiceCollection AddEventBus(this IServiceCollection services, IConfiguration configuration) { services.AddSingleton <IEventBus, EventBusRabbitMq>(s => { var serviceBusConnection = s.GetRequiredService <IRabbitMqPersistentConnection>(); var iLifetimeScope = s.GetRequiredService <ILifetimeScope>(); var logger = s.GetRequiredService <ILogger <EventBusRabbitMq> >(); var subscriptionsManager = s.GetRequiredService <IEventBusSubscriptionsManager>(); var eventBus = new EventBusRabbitMq(serviceBusConnection, logger, subscriptionsManager, iLifetimeScope, "pong_queue", 5); return(eventBus); }); services.AddSingleton <IEventBusSubscriptionsManager, InMemoryEventBusSubscriptionsManager>(); services.AddTransient <PingerBouncedBallEventHandler>(); return(services); }