public static ILinFxBuilder AddEventBus(this ILinFxBuilder builder, Action <EventBusOptions> optionsAction)
        {
            Check.NotNull(builder, nameof(builder));
            Check.NotNull(optionsAction, nameof(optionsAction));

            builder.Services.AddSingleton <IEventBusSubscriptionsManager, InMemoryEventBusSubscriptionsManager>();

            var options = new EventBusOptions();

            optionsAction?.Invoke(options);
            options.ConfigureEventBus?.Invoke(builder, new EventBusOptionsBuilder(options));

            return(builder);
        }
Exemple #2
0
        public static ILinFxBuilder AddElasticsearch(this ILinFxBuilder builder, Action <ElasticsearchOptions> optionsAction)
        {
            var options = new ElasticsearchOptions();

            optionsAction?.Invoke(options);

            var node     = new Uri(options.Host);
            var settings = new ConnectionSettings(node).DefaultIndex(options.Index);
            var client   = new ElasticClient(settings);

            builder.Services.Add(ServiceDescriptor.Singleton <IElasticClient>(client));

            return(builder);
        }
        public static ILinFxBuilder AddEventStores(
            [NotNull] this ILinFxBuilder builder,
            [NotNull] Action <IServiceProvider, EventStoreOptionsBuilder> optionsAction,
            ServiceLifetime optionsLifetime = ServiceLifetime.Scoped)
        {
            Check.NotNull(builder, nameof(builder));
            Check.NotNull(optionsAction, nameof(optionsAction));

            AddCoreServices(builder.Services, optionsAction, optionsLifetime);

            builder.Services.AddDbContext <EventStoreContext>();
            builder.Services.AddTransient <IEventStore, EventStoreManager>();

            return(builder);
        }
Exemple #4
0
        public static ILinFxBuilder AddDatabase(this ILinFxBuilder builder, Action <DbConnectionOptions> optionsAction)
        {
            Check.NotNull(builder, nameof(builder));

            //var factory = new DbConnectionFactory(connectionString, PostgreSqlProvider.Instance);
            //var config = new DapperExtensionsConfiguration(typeof(AutoClassMapper<>), new List<Assembly>(), new PostgreSqlDialect());
            //var db = new Database(factory.Create(), new SqlGeneratorImpl(config));

            //var factory = new DbConnectionFactory(connectionString, MySqlProvider.Instance);
            //var config = new DapperExtensionsConfiguration(typeof(AutoClassMapper<>), new List<Assembly>(), new MySqlDialect());
            //return new Database(factory.Create(), new SqlGeneratorImpl(config));

            builder.Services.AddTransient <IDatabase, Database>();

            return(builder);
        }
Exemple #5
0
        public static ILinFxBuilder AddDapperExtensions(this ILinFxBuilder builder, Action setupAction)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (setupAction == null)
            {
                throw new ArgumentNullException(nameof(setupAction));
            }

            //builder.Services.Configure(setupAction);
            //builder.Services.Add(ServiceDescriptor.Singleton<IDistributedCache, RedisCache>());

            return(builder);
        }
        public static ILinFxBuilder AddRabbitMQPersistentConnection(this ILinFxBuilder builder, Action <RabbitMqOptions> optionsAction)
        {
            var options = new RabbitMqOptions();

            optionsAction?.Invoke(options);

            builder.Services.AddSingleton((Func <IServiceProvider, IRabbitMQPersistentConnection>)(sp =>
            {
                var logger  = sp.GetRequiredService <ILogger <DefaultRabbitMQPersistentConnection> >();
                var factory = new ConnectionFactory
                {
                    HostName = options.Host,
                    UserName = options.UserName,
                    Password = options.Password,
                };
                return(new DefaultRabbitMQPersistentConnection(factory, logger));
            }));

            return(builder);
        }
        public static ILinFxBuilder AddRabbitMQ(this ILinFxBuilder builder, Action <RabbitMQOptions> optionsAction)
        {
            Check.NotNull(builder, nameof(builder));
            Check.NotNull(optionsAction, nameof(optionsAction));

            var options = new RabbitMQOptions();

            optionsAction?.Invoke(options);

            builder.Services.AddSingleton <IRabbitMQPersistentConnection>(sp =>
            {
                var logger  = sp.GetRequiredService <ILogger <DefaultRabbitMQPersistentConnection> >();
                var factory = new ConnectionFactory
                {
                    UserName = options.UserName,
                    Password = options.Password,
                    HostName = options.Host,
                };
                return(new DefaultRabbitMQPersistentConnection(factory, logger));
            });

            return(builder);
        }
        public static ILinFxBuilder AddEventBusRabbitMQ(this ILinFxBuilder builder, Action <EventBusOptions> optionsAction)
        {
            Check.NotNull(builder, nameof(builder));
            Check.NotNull(optionsAction, nameof(optionsAction));

            //Options and extension service
            var options = new EventBusOptions();

            optionsAction?.Invoke(options);

            builder.Services.AddSingleton <IEventBusSubscriptionsManager, InMemoryEventBusSubscriptionsManager>();
            builder.Services.AddSingleton <IEventBus, EventBusRabbitMQ>(sp =>
            {
                var logger = sp.GetRequiredService <ILogger <EventBusRabbitMQ> >();
                var rabbitMQPersistentConnection = sp.GetRequiredService <IRabbitMQPersistentConnection>();
                var iServiceScopeFactory         = sp.GetRequiredService <IServiceScopeFactory>();
                var eventBusSubcriptionsManager  = sp.GetRequiredService <IEventBusSubscriptionsManager>();

                return(new EventBusRabbitMQ(logger, rabbitMQPersistentConnection, eventBusSubcriptionsManager, iServiceScopeFactory, options));
            });

            return(builder);
        }
        /// <summary>
        /// Adds Redis distributed caching services to the specified <see cref="ILinFxBuilder" />.
        /// </summary>
        /// <param name="builder">The <see cref="ILinFxBuilder" /> to add services to.</param>
        /// <param name="setupAction">An <see cref="Action{RedisCacheOptions}"/> to configure the provided
        /// <see cref="RedisCacheOptions"/>.</param>
        /// <returns>The <see cref="ILinFxBuilder"/> so that additional calls can be chained.</returns>
        public static ILinFxBuilder AddDistributedRedisCache(this ILinFxBuilder builder, Action <RedisCacheOptions> setupAction)
        {
            builder.Services.AddDistributedRedisCache(setupAction);

            return(builder);
        }
Exemple #10
0
 public EventBusBuilder(ILinFxBuilder fx)
 {
     Fx = fx;
 }
        public static EventBusOptionsBuilder UseRabbitMQ(this EventBusOptionsBuilder optionsBuilder, ILinFxBuilder builder, Action <EventBusRabbitMqOptions> optionsAction)
        {
            Check.NotNull(optionsAction, nameof(optionsAction));

            var options = new EventBusRabbitMqOptions();

            optionsAction?.Invoke(options);

            builder.Services.AddSingleton((Func <IServiceProvider, IRabbitMQPersistentConnection>)(sp =>
            {
                var logger  = sp.GetRequiredService <ILogger <DefaultRabbitMQPersistentConnection> >();
                var factory = new ConnectionFactory
                {
                    UserName = options.UserName,
                    Password = options.Password,
                    HostName = options.Host,
                };
                return(new DefaultRabbitMQPersistentConnection((IConnectionFactory)factory, (ILogger <DefaultRabbitMQPersistentConnection>)logger));
            }));

            builder.Services.AddSingleton <IEventBus, EventBusRabbitMQ>(sp =>
            {
                var logger = sp.GetRequiredService <ILogger <EventBusRabbitMQ> >();
                var rabbitMQPersistentConnection = sp.GetRequiredService <IRabbitMQPersistentConnection>();
                var iServiceScopeFactory         = sp.GetRequiredService <IServiceScopeFactory>();
                var eventBusSubcriptionsManager  = sp.GetRequiredService <IEventBusSubscriptionsManager>();
                return(new EventBusRabbitMQ(logger, rabbitMQPersistentConnection, eventBusSubcriptionsManager, iServiceScopeFactory, optionsBuilder.Options));
            });

            return(optionsBuilder);
        }
        public static EventBusOptionsBuilder UseRabbitMQ(this EventBusOptionsBuilder optionsBuilder, ILinFxBuilder fx, Action <RabbitMQOptions> optionsAction)
        {
            Check.NotNull(optionsAction, nameof(optionsAction));

            var options = new RabbitMQOptions();

            optionsAction?.Invoke(options);

            fx.AddRabbitMQ(x =>
            {
                x.Host     = options.Host;
                x.UserName = options.UserName;
                x.Password = options.Password;
            });

            fx.Services.AddSingleton <IEventBus, EventBusRabbitMQ>(sp =>
            {
                var logger = sp.GetRequiredService <ILogger <EventBusRabbitMQ> >();
                var rabbitMQPersistentConnection = sp.GetRequiredService <IRabbitMQPersistentConnection>();
                var iServiceScopeFactory         = sp.GetRequiredService <IServiceScopeFactory>();
                var eventBusSubcriptionsManager  = sp.GetRequiredService <IEventBusSubscriptionsManager>();
                return(new EventBusRabbitMQ(logger, rabbitMQPersistentConnection, eventBusSubcriptionsManager, iServiceScopeFactory, optionsBuilder.Options));
            });

            return(optionsBuilder);
        }