All Versions
Latest Version
Avg Release Cycle
240 days
Latest Release
936 days ago

Changelog History

  • v3.0.0 Changes

    July 06, 2020

    🚀 This release contains a few (minor) breaking changes. Generated 2.x ID's are still compatible with 3.x ID's.

    • Most of the constructor overloads for the IdGenerator have been replaced with a single constructor which accepts IdGeneratorOptions that contains the ITimeSource, IdStructure and SequenceOverflowStrategy.
    • The MaskConfig class is now more appropriately named IdStructure since it describes the structure of the generated ID's.
    • 🚚 The UseSpinWait property has moved to the IdGeneratorOptions and is now an enum of type SequenceOverflowStrategy instead of a boolean value. Note that this property has also been renamed in the config file (from useSpinWait to sequenceOverflowStrategy) and is no longer a boolean but requires one of the values from SequenceOverflowStrategy.
    • ID is now Id (only used as return value by the FromId(...) method)
  • v2.4.1 Changes

    July 02, 2020

    🔧 The IdGenerator now offers a spinwaiting strategy when a sequenceoverflow occurs instead of throwing a SequenceOverflowException. This will spinwait until the next tick and then return a new Id. New constructoroverloads have been added to be able to set this property at construction time. Also the configuration package supports this new option with a useSpinWait attribute on the idGenerator element.

  • v2.4 Changes

    July 02, 2020

    🛠 Fix concurrency issue (see PR #23). Upped version.

  • v2.3 Changes

    April 20, 2020

    🔄 Changes:

    • 👀 Added TryCreate() method (see #21)
    • 👀 Fix bug where different instances didn't share the same offset (see #20)
  • v2.1 Changes

    February 19, 2020

    🔄 Changes:

    • 👍 Support for NetStandard 1.1+
    • 🔧 Moved AppConfig stuff to separate IDGen.Configuration package
    • ID now implements IEquatable
    • 🛠 Fixed some ArgumentOutOfRangeExceptions from the IdGenerator's ctor messages
    • 👀 Fixed bug (see #18) where internal timer was started only on first use instead of on instantiation. Thanks @stuart-beattie!
    • 🔨 Minor internal cleanup / refactoring

    💥 Breaking changes:

    If you're using the IdGenerator.GetFromConfig(...) method make sure you check the README. The changes aren't big, but breaking nonetheless. How to fix:

    • 🔧 Install IdGen.Configuration package
    • 🔄 Change the configsection type from:
      🔧 IdGen.Configuration.IdGeneratorsSection, IdGen
      🔧 IdGen.Configuration.IdGeneratorsSection, IdGen.Configuration
    • ➕ Add a using IdGen.Configuration
    • 🔄 Change IdGenerator.GetFromConfig(...) to AppConfigFactory.GetFromConfig(...)
  • v2.0.3 Changes

    August 02, 2018
    • ➕ Added FromId() method to 'decode' an Id
    • 🔨 Minor internal refactoring
  • v2.0.1 Changes

    November 23, 2016

    🛠 Timesource(s) is (are) no longer fixed to 'millisecond resolution'; we now have the concept of a 'tick'. Each timesource can define it's own definition of what a 'tick' is, be it a millisecond or a minute or any other timespan.

    This means breaking changes in the ITimeSource interface and the way timesources are implemented and breaking changes in some of the MaskConfig's method signatures.

    The IIdGenerator<T> interface now explicitly exposes an IdGenerator's ITimeSource, MaskConfig and Epoch as (read-only) properties.

    🚚 CreateMachineSpecificGenerator() & CreateThreadSpecificGenerator() methods have been removed; these are way to 'dangerous' to use anyway since they are very prone to 'collisions' in 'auto-generated' values for the IdGenerators.

  • v1.1 Changes

    June 29, 2015

    🐎 Moved away from DateTime.UtcNow and implemented a better, millisecond resolution, DefaultTimeSource using QueryPerformanceCounter.

  • v1.0

    April 08, 2015