/// <summary> /// Invoke this method upon start. /// </summary> /// <param name="args"></param> public void OnStart(string[] args) { Contract.Requires<ArgumentNullException>(args != null); var sect = RnetServiceConfigurationSection.GetDefaultSection(); if (sect == null) throw new ConfigurationErrorsException("Rnet.Service configuration not found."); // spawn each host foreach (var conf in sect.Hosts) { // expose new bus on a new host with new container var container = new CompositionContainer(catalog); var context = new AsyncContextThread(); var bus = new RnetBus(conf.Bus); var host = new RnetHost(bus, conf.Uri, container); instances.Add(new Instance(container, context, bus, host)); // schedule initialization context.Factory.Run(async () => { await bus.Start(); await host.StartAsync(); }).Wait(); } }
/// <summary> /// Initializes a new instance. /// </summary> /// <param name="container"></param> /// <param name="sync"></param> /// <param name="bus"></param> /// <param name="host"></param> public Instance(CompositionContainer container, AsyncContextThread sync, RnetBus bus, RnetHost host) { Contract.Requires<ArgumentNullException>(container != null); Contract.Requires<ArgumentNullException>(sync != null); Contract.Requires<ArgumentNullException>(bus != null); Contract.Requires<ArgumentNullException>(host != null); Container = container; Context = sync; Bus = bus; Host = host; }