Esempio n. 1
0
        private static void AddConsumerIntoContainer(ITwinoServiceCollection container, ImplementationType implementationType, Type consumerType)
        {
            switch (implementationType)
            {
            case ImplementationType.Transient:
                container.AddTransient(consumerType, consumerType);
                break;

            case ImplementationType.Scoped:
                container.AddScoped(consumerType, consumerType);
                break;

            case ImplementationType.Singleton:
                container.AddSingleton(consumerType, consumerType);
                break;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Adds Twino connector with configuration
        /// </summary>
        public static ITwinoServiceCollection UseTwinoBus(this ITwinoServiceCollection services, Action <TwinoConnectorBuilder> config)
        {
            TwinoConnectorBuilder builder = new TwinoConnectorBuilder(services);

            config(builder);

            TmqStickyConnector connector = builder.Build();

            AddConsumersTwino(services, connector, builder);
            services.AddSingleton(connector);
            services.AddSingleton(connector.Bus);
            services.AddSingleton(connector.Bus.Direct);
            services.AddSingleton(connector.Bus.Queue);
            services.AddSingleton(connector.Bus.Route);

            connector.Run();
            return(services);
        }
Esempio n. 3
0
        private static void AddConsumersTwino(ITwinoServiceCollection services, TmqStickyConnector connector, TwinoConnectorBuilder builder)
        {
            foreach (Tuple <ImplementationType, Type> pair in builder.AssembyConsumers)
            {
                IEnumerable <Type> types = connector.Observer
                                           .RegisterAssemblyConsumers(() => new TwinoIocConsumerFactory((IServiceContainer)services, pair.Item1),
                                                                      pair.Item2);

                foreach (Type type in types)
                {
                    AddConsumerIntoContainer(services, pair.Item1, type);
                }
            }

            foreach (Tuple <ImplementationType, Type> pair in builder.IndividualConsumers)
            {
                connector.Observer.RegisterConsumer(pair.Item2,
                                                    () => new TwinoIocConsumerFactory((IServiceContainer)services, pair.Item1));
                AddConsumerIntoContainer(services, pair.Item1, pair.Item2);
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Adds Twino connector with configuration
        /// </summary>
        public static ITwinoServiceCollection UseTwinoBus <TIdentifier>(this ITwinoServiceCollection services, Action <TwinoConnectorBuilder> config)
        {
            TwinoConnectorBuilder builder = new TwinoConnectorBuilder(services);

            config(builder);

            TmqStickyConnector <TIdentifier> connector = builder.Build <TIdentifier>();

            AddConsumersTwino(services, connector, builder);
            services.AddSingleton(connector);

            TwinoBus <TIdentifier> bus = (TwinoBus <TIdentifier>)connector.Bus;

            services.AddSingleton <ITwinoBus <TIdentifier> >(bus);
            services.AddSingleton <ITwinoDirectBus <TIdentifier> >((TwinoDirectBus <TIdentifier>)bus.Direct);
            services.AddSingleton <ITwinoQueueBus <TIdentifier> >((TwinoQueueBus <TIdentifier>)bus.Queue);
            services.AddSingleton <ITwinoRouteBus <TIdentifier> >((TwinoRouteBus <TIdentifier>)bus.Route);

            connector.Run();
            return(services);
        }