Exemple #1
0
        public SqlServerQueueProvider(SqlServerQueueProviderOptions opt, IQueueConfigProvider names, ISqlServerQueueProviderMigrator migrator, ISqlCommandExecutor sqlCommandExecutor)
        {
            _config             = names;
            _migrator           = migrator;
            _sqlCommandExecutor = sqlCommandExecutor;
            _connectionString   = opt.ConnectionString;
            _canMigrateDb       = opt.CanMigrateDb;
            _canCreateDb        = opt.CanCreateDb;

            IsDequeueBlocking = true;

            _queueWorkCommand   = GetFromResource("QueueWork");
            _dequeueWorkCommand = GetFromResource("DequeueWork");
        }
        /// <summary>
        ///     Use SQL Server as a queue provider
        /// </summary>
        /// <param name="options"></param>
        /// <param name="connectionString"></param>
        /// <returns></returns>
        public static WorkflowOptions UseSqlServerBroker(this WorkflowOptions options, string connectionString, bool canCreateDb, bool canMigrateDb)
        {
            options.Services.AddTransient <IQueueConfigProvider, QueueConfigProvider>();
            options.Services.AddTransient <ISqlCommandExecutor, SqlCommandExecutor>();
            options.Services.AddTransient <ISqlServerQueueProviderMigrator>(sp => new SqlServerQueueProviderMigrator(connectionString, sp.GetService <IQueueConfigProvider>(), sp.GetService <ISqlCommandExecutor>()));

            var sqlOptions = new SqlServerQueueProviderOptions()
            {
                ConnectionString = connectionString,
                CanCreateDb      = canCreateDb,
                CanMigrateDb     = canMigrateDb
            };

            options.UseQueueProvider(sp =>
            {
                return(new SqlServerQueueProvider(sqlOptions, sp.GetService <IQueueConfigProvider>(), sp.GetService <ISqlServerQueueProviderMigrator>(), sp.GetService <ISqlCommandExecutor>()));
            });

            return(options);
        }