public HL7ListenerService(IOptions <Hl7ListenerSettings> settings, IHL7Acknowledger hl7Acknowledger, ISqliteQueueManager sqliteQueueManager, ILoggerFactory logFactory) { _settings = settings?.Value ?? throw new ArgumentNullException(nameof(settings)); _sqliteQueueManager = sqliteQueueManager; _hl7Acknowledger = hl7Acknowledger; _logger = logFactory.CreateLogger(_settings.Name); var serverIp = IPAddress.Any; if (!string.IsNullOrEmpty(_settings.IpAddress)) { serverIp = IPAddress.Parse(_settings.IpAddress); } _listener = new TcpListener(new IPEndPoint(serverIp, _settings.Port)); }
// This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddOptions(); services.AddTransient <IHL7Acknowledger, HL7Acknowledger>(); // Setup the persistent queue first. services.Configure <SqliteQueueManagerSettings>(options => Configuration.GetSection("Queue").Bind(options)); services.AddSingleton <ISqliteQueueManager, SqliteQueueManager>(); // Setup the background task for queue sanity keeper services.Configure <PersistentQueueMonitoringSettings>(options => Configuration.GetSection("QueueMonitoring").Bind(options)); services.AddSingleton <IPersistentQueueMonitoringTask, PersistentQueueMonitoringTask>(); services.AddSingleton <IHostedService>(x => x.GetService <IPersistentQueueMonitoringTask>() as IHostedService); // Setup the consumer of the queue services.Configure <HL7HandlerSettings>(options => Configuration.GetSection("Handling").Bind(options)); services.AddSingleton <IHL7HandlerManager, HL7HandlerManager>(); services.AddSingleton <IHostedService>(x => x.GetService <IHL7HandlerManager>() as IHostedService); // Now let's spin up all the listeners, they are all producers to the queue var listenerConfigurations = Configuration.GetSection("Listeners"); foreach (var configuration in listenerConfigurations.GetChildren()) { var listenerSettings = new Hl7ListenerSettings(); configuration.Bind(listenerSettings); services.AddTransient <IHostedService>((factory) => { return(new HL7ListenerService(Options.Create <Hl7ListenerSettings>(listenerSettings), factory.GetRequiredService <IHL7Acknowledger>(), factory.GetRequiredService <ISqliteQueueManager>(), factory.GetRequiredService <ILoggerFactory>())); }); } var container = new ContainerBuilder(); container.Populate(services); return(new AutofacServiceProvider(container.Build())); }