internal EndpointConfig[] Build(ConfigureHost host, IContainerScope container, BusAuditor auditor) => _points.Select(ec => { var ep = ec.Key; var nexus = new MessageHandlersNexus(container,auditor,host); nexus.Add(host.Handlers.Where(ep.CanHandle).ToArray()); var processor = new ProcessingService(host.GetStorage<IStoreUnhandledMessages>(), () => new MessageProcessor(nexus), auditor,host.GetStorage<IFailedMessagesQueue>()); ec.Value(processor); var config = new EndpointConfig(processor); config.Id = new EndpointId(ep.Name, host.HostName); config.HandledMessagesTypes = nexus.GetMessageTypes().ToArray(); processor.Name = config.Id; return config; }).ToArray();
void RegisterTypesInContainer(IRegisterBusTypesInContainer cb) { cb.RegisterSingletonInstance(new BusAuditor(_host.GetStorage <IStoreAudits>())); cb.RegisterSingletonInstance(_host.GetStorage <IStoreSagaState>()); _host.Handlers.MustNotBeNull("Handlers are null"); _host.SagaStateTypes.MustNotBeNull("Saga state types are null"); Func <Type, bool> isSingleton = t => t.HasCustomAttribute <SingletonHandlerAttribute>(); cb.Register(_host.Handlers.Where(t => !isSingleton(t)).ToArray()); cb.Register(_host.Handlers.Where(t => isSingleton(t)).ToArray(), true); cb.Register(_host.SagaStateTypes); cb.RegisterSingletonInstance(_bus); cb.RegisterInstanceFactory(_bus.GetDispatcher); }
public MessageHandlersNexus(IContainerScope container,BusAuditor auditor,ConfigureHost host) { container.MustNotBeNull(); _container = container; _auditor = auditor; _host = host; _error = host.GetStorage<IFailedMessagesQueue>(); }
public IDispatchMessages GetDispatcher() => new MessageDispatcher(_client.Dispatch, _host.GetStorage <IStoreReservedMessagesIds>());