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; } }
/// <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); }
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); } }
/// <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); }