public static IQueueProvider CreateProvider(QueueProvider provider, bool singleton = false)
        {
            if (provider == QueueProvider.Configured)
            {
                QueueProvider outProvider;
                var           strProvider = ConfigSource.FirstAppSetting("DQueue.Provider", "QueueProvider");
                if (Enum.TryParse <QueueProvider>(strProvider, true, out outProvider))
                {
                    provider = outProvider;
                }
                else
                {
                    throw new ArgumentException("Can not support queue provider: " + strProvider);
                }
            }

            if (provider == QueueProvider.Redis)
            {
                return(new RedisProvider());
            }

            if (provider == QueueProvider.RabbitMQ)
            {
                return(new RabbitMQProvider());
            }

            if (provider == QueueProvider.AspNet)
            {
                return(new AspNetProvider());
            }

            throw new ArgumentException("Can not support queue provider: " + provider.ToString());
        }