/// <summary> /// 构造一个 <see cref="SnowflakeIdGenerator"/>。 /// </summary> /// <param name="snowflakes">给定的 <see cref="SnowflakeIdOptions"/>。</param> /// <param name="options">给定的 <see cref="IdGenerationOptions"/>。</param> /// <param name="clock">给定的 <see cref="IClockBootstrap"/>。</param> public SnowflakeIdGenerator(SnowflakeIdOptions snowflakes, IdGenerationOptions options, IClockBootstrap clock) : base(options, clock) { Snowflakes = snowflakes; if (options.MachineId >= 0) { _machineId = options.MachineId.NotGreater(Snowflakes.GetMaxMachineId()); } else { _machineId = Snowflakes.MachineBits; } if (options.DataCenterId >= 0) { _dataCenterId = options.DataCenterId.NotGreater(Snowflakes.GetMaxDataCenterId()); } else { _dataCenterId = Snowflakes.DataCenterBits; } }
/// <summary> /// 构造一个 <see cref="CombSnowflakeIdGenerator"/>。 /// </summary> /// <param name="options">给定的 <see cref="IdGenerationOptions"/>。</param> /// <param name="clock">给定的 <see cref="IClockBootstrap"/>。</param> public CombSnowflakeIdGenerator(IdGenerationOptions options, IClockBootstrap clock) : base(options, clock) { _workId = options.WorkId; }
/// <summary> /// 使用内置的 <see cref="Bootstrapper.GetClock()"/> 构造一个 <see cref="CombSnowflakeIdGenerator"/>。 /// </summary> /// <param name="options">给定的 <see cref="IdGenerationOptions"/>。</param> public CombSnowflakeIdGenerator(IdGenerationOptions options) : this(options, Bootstrapper.GetClock()) { }
/// <summary> /// 构造一个 <see cref="AbstractClockIdGenerator{TId}"/>。 /// </summary> /// <param name="options">给定的 <see cref="IdGenerationOptions"/>。</param> /// <param name="clock">给定的 <see cref="IClockBootstrap"/>。如使用本地时钟可参考 <see cref="Bootstrapper.GetClock()"/>。</param> protected AbstractClockIdGenerator(IdGenerationOptions options, IClockBootstrap clock) { Options = options; Clock = clock; }
/// <summary> /// 构造一个 <see cref="CombIdGenerator"/>。 /// </summary> /// <param name="generation">给定的 <see cref="CombIdGeneration"/>。</param> /// <param name="options">给定的 <see cref="IdGenerationOptions"/>。</param> /// <param name="clock">给定的 <see cref="IClockBootstrap"/>。</param> public CombIdGenerator(CombIdGeneration generation, IdGenerationOptions options, IClockBootstrap clock) : base(options, clock) { Generation = generation; }
/// <summary> /// 使用内置的 <see cref="Bootstrapper.GetClock()"/> 构造一个 <see cref="SnowflakeIdGenerator"/>。 /// </summary> /// <param name="snowflakes">给定的 <see cref="SnowflakeIdOptions"/>。</param> /// <param name="options">给定的 <see cref="IdGenerationOptions"/>。</param> public SnowflakeIdGenerator(SnowflakeIdOptions snowflakes, IdGenerationOptions options) : this(snowflakes, options, Bootstrapper.GetClock()) { }
=> ForMySql(options, clock); // 使用与 MySQL 数据库相同的排序方式 /// <summary> /// 支持 SQL Server 排序类型的 COMB 标识生成器(uniqueidentifier)。 /// </summary> /// <param name="options">给定的 <see cref="IdGenerationOptions"/>。</param> /// <param name="clock">给定的 <see cref="IClockBootstrap"/>(可选;默认使用 <see cref="Bootstrapper.GetClock()"/>)。</param> /// <returns>返回 <see cref="CombIdGenerator"/>。</returns> public static CombIdGenerator ForSqlServer(IdGenerationOptions options, IClockBootstrap?clock = null) => new CombIdGenerator(CombIdGeneration.AtEnd, options, clock ?? Bootstrapper.GetClock());
/// <summary> /// 使用内置的 <see cref="Bootstrapper.GetClock()"/> 构造一个 <see cref="CombIdGenerator"/>。 /// </summary> /// <param name="generation">给定的 <see cref="CombIdGeneration"/>。</param> /// <param name="options">给定的 <see cref="IdGenerationOptions"/>。</param> public CombIdGenerator(CombIdGeneration generation, IdGenerationOptions options) : this(generation, options, Bootstrapper.GetClock()) { }
/// <summary> /// 支持 SQLite 排序类型的 COMB 标识生成器(text)。 /// </summary> /// <param name="options">给定的 <see cref="IdGenerationOptions"/>。</param> /// <param name="clock">给定的 <see cref="IClockBootstrap"/>(可选;默认使用 <see cref="Bootstrapper.GetClock()"/>)。</param> /// <returns>返回 <see cref="CombIdGenerator"/>。</returns> public static CombIdGenerator ForSqlite(IdGenerationOptions options, IClockBootstrap?clock = null) => ForMySql(options, clock); // 使用与 MySQL 数据库相同的排序方式
/// <summary> /// 支持 Oracle 排序类型的 COMB 标识生成器(raw(16))。 /// </summary> /// <param name="options">给定的 <see cref="IdGenerationOptions"/>。</param> /// <param name="clock">给定的 <see cref="IClockBootstrap"/>(可选;默认使用 <see cref="Bootstrapper.GetClock()"/>)。</param> /// <returns>返回 <see cref="CombIdGenerator"/>。</returns> public static CombIdGenerator ForOracle(IdGenerationOptions options, IClockBootstrap?clock = null) => new CombIdGenerator(CombIdGeneration.AsBinary, options, clock ?? Bootstrapper.GetClock());
/// <summary> /// 支持 MySQL 排序类型的 COMB 标识生成器(char(36))。 /// </summary> /// <param name="options">给定的 <see cref="IdGenerationOptions"/>。</param> /// <param name="clock">给定的 <see cref="IClockBootstrap"/>(可选;默认使用 <see cref="Bootstrapper.GetClock()"/>)。</param> /// <returns>返回 <see cref="CombIdGenerator"/>。</returns> public static CombIdGenerator ForMySql(IdGenerationOptions options, IClockBootstrap?clock = null) => new CombIdGenerator(CombIdGeneration.AsString, options, clock ?? Bootstrapper.GetClock());
/// <summary> /// 构造一个 <see cref="MongoIdGenerator"/>。 /// </summary> /// <param name="mongos">给定的 <see cref="MongoIdOptions"/>。</param> /// <param name="options">给定的 <see cref="IdGenerationOptions"/>。</param> /// <param name="clock">给定的 <see cref="IClockBootstrap"/>。</param> public MongoIdGenerator(MongoIdOptions mongos, IdGenerationOptions options, IClockBootstrap clock) : base(options, clock) { Mongos = mongos; }
/// <summary> /// 使用内置的 <see cref="Bootstrapper.GetClock()"/> 构造一个 <see cref="MongoIdGenerator"/>。 /// </summary> /// <param name="mongos">给定的 <see cref="MongoIdOptions"/>。</param> /// <param name="options">给定的 <see cref="IdGenerationOptions"/>。</param> public MongoIdGenerator(MongoIdOptions mongos, IdGenerationOptions options) : this(mongos, options, Bootstrapper.GetClock()) { }