/// <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="bus"></param> /// <param name="baseUri"></param> /// <param name="exports"></param> public RnetHost(RnetBus bus, Uri baseUri, CompositionContainer exports) : this(bus, baseUri.ToString(), exports) { Contract.Requires<ArgumentNullException>(bus != null); Contract.Requires<ArgumentNullException>(baseUri != null); Contract.Requires<ArgumentNullException>(exports != null); Contract.Requires<ArgumentException>(baseUri.ToString().EndsWith("/")); }
/// <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; }
/// <summary> /// Initializes a new instance. /// </summary> /// <param name="bus"></param> /// <param name="baseUri"></param> /// <param name="exports"></param> public RnetHost(RnetBus bus, string baseUri, CompositionContainer exports) { Contract.Requires<ArgumentNullException>(bus != null); Contract.Requires<ArgumentNullException>(baseUri != null); Contract.Requires<ArgumentNullException>(exports != null); Contract.Requires<ArgumentException>(baseUri.EndsWith("/")); this.bus = bus; this.baseUri = baseUri; this.container = exports; // export initial values exports.ComposeExportedValue<ICompositionService>(new CompositionService(exports)); exports.ComposeExportedValue(this); exports.ComposeExportedValue(bus); }
public RootProcessor( [Import] ICompositionService composition, [Import] RnetBus bus, [Import] DriverManager driverManager, [Import] ProfileManager profileManager, [ImportMany] IEnumerable<Lazy<IRequestProcessor, RequestProcessorMetadata>> requestProcessors, [ImportMany] IEnumerable<Lazy<IResponseProcessor, ResponseProcessorMetadata>> responseProcessors) { Contract.Requires<ArgumentNullException>(composition != null); Contract.Requires<ArgumentNullException>(bus != null); Contract.Requires<ArgumentNullException>(requestProcessors != null); Contract.Requires<ArgumentNullException>(responseProcessors != null); Contract.Requires<ArgumentNullException>(driverManager != null); Contract.Requires<ArgumentNullException>(profileManager != null); this.composition = composition; this.bus = bus; this.driverManager = driverManager; this.profileManager = profileManager; this.requestProcessors = requestProcessors; this.responseProcessors = responseProcessors; }