예제 #1
0
        public void Invoke()
        {
            if (_invoked)
            {
                return;
            }

            using var scope = _scopeFactory.CreateScope();
            var endpointsConfigurationBuilder = new EndpointsConfigurationBuilder(scope.ServiceProvider);

            scope.ServiceProvider.GetServices <IEndpointsConfigurator>()
            .ForEach(configurator => configurator.Configure(endpointsConfigurationBuilder));

            _invoked = true;
        }
        /// <summary>
        /// Configures the message broker endpoints and start consuming.
        /// </summary>
        /// <param name="configurator"></param>
        /// <param name="endpointsConfigurationAction">The inbound/outbound endpoints configuration action.</param>
        /// <returns></returns>
        public static IBroker Connect(this BusConfigurator configurator,
                                      Action <IEndpointsConfigurationBuilder> endpointsConfigurationAction)
        {
            var endpointsConfigurationBuilder = new EndpointsConfigurationBuilder(
                configurator.ServiceProvider.GetRequiredService <IOutboundRoutingConfiguration>(),
                configurator.ServiceProvider.GetRequiredService <IEnumerable <IInboundConnector> >(),
                configurator.ServiceProvider.GetRequiredService <ErrorPolicyBuilder>());

            endpointsConfigurationAction?.Invoke(endpointsConfigurationBuilder);

            configurator.ServiceProvider.GetServices <IEndpointsConfigurator>().ForEach(c =>
                                                                                        c.Configure(endpointsConfigurationBuilder));

            var broker = configurator.ServiceProvider.GetRequiredService <IBroker>();

            broker.Connect();

            return(broker);
        }