Strongly Typed ID type Generator
This tool uses simple text files as input like :
public Corp.Product.UserId<string> public Corp.Product.TweetId<long> EqualsUnderlying: true
And generate for each type specified a type that can be used as a strongly-typed ID:
- It's an immutable value type with a single member.
structis partial to allow addition of methods and properties.
nullvalues are disallowed by default and an extensibility point is available to add more application-dependent checks.
- Casts from and to the underlying type are available. (explicit by default)
- Equality member and operators are lifted, by default the ID types are only equals between themselves but equality with the underlying type is can be enabled with
IConvertibleis implemented if the underlying type implement it.
IComparable<Id>is implemented if
IComparable<Underlying>is implemented by the underlying type.
IComparable<T>implementations are lifted if
stringIDs are interned by default.
Examples of generated files can be found in the sample folder.
The recommended way is via paket or nuget.
For nuget :
nuget install stidgen -ExcludeVersion -OutputDirectory packages
For paket, add
nuget stidgen to your
paket.dependencies and then to
install it :
A zip file containing the latest released version can also be found in the latest GitHub release.
Then to generate all files specified by a stidgen definition file :
Definition file format
Each definition file can contain a number of types of the form :
public|internal [Namespace.]TypeName<UnderlyingType> PropertyA: value PropertyB: value
- ValueProperty (string): Specify the name of the property containing the underlying value. Default to "Value".
- AllowNull (bool): Allow null underlying values (only applies if the underlying type is a reference type). Default to false.
- InternString (bool): Intern string underlying values (only applies if the underlying type is
string. Default to true.
- EqualsUnderlying (bool): Make the underlying be equal to the Id type when Equals, CompareTo and == are called.
IComparable<Underlying>on the id type.
- CastToUnderlying ("explicit" or "implicit"): Specify how is generated the cast from the id type to the underlying type. Default to "explicit".
- CastFromUnderlying ("explicit" or "implicit"): Specify how is generated the cast from the underlying type to the id type. Default to "explicit".
- FileName (string): Full name of the file to generate for this type. Default to "TypeName.Generated.cs".
- ProtobufnetSerializable (bool): Enable the generation of
[ProtoMember]attributes for protobuf-net support. Default to false.