diff --git a/src/SKILL.md b/src/SKILL.md index 1398a19..ea452d2 100644 --- a/src/SKILL.md +++ b/src/SKILL.md @@ -100,13 +100,14 @@ For every struct ID, the source generator emits: - Implicit/explicit conversion operators to/from `TValue` - `INewable` / `INewable` implementation - `New(TValue value)` static factory method -- `New()` (parameterless) for `Guid`- and `Ulid`-backed IDs, using `Guid.NewGuid()` / `Ulid.NewUlid()` +- `New()` (parameterless) for `Guid`- and `Ulid`-backed IDs, using `Guid.CreateVersion7()` on .NET 9+ or `Guid.NewGuid()` on earlier targets / `Ulid.NewUlid()` ## Factory Methods ```csharp // Guid-backed: parameterless New() generates a new GUID -var userId = UserId.New(); // new UserId(Guid.NewGuid()) +// On .NET 9+, uses Guid.CreateVersion7(); earlier targets use Guid.NewGuid() +var userId = UserId.New(); // new UserId(Guid.CreateVersion7()) on .NET 9+ var userId2 = UserId.New(someGuid); // new UserId(someGuid) // Ulid-backed: parameterless New() generates a new ULID diff --git a/src/StructId/Templates/NewableGuid.cs b/src/StructId/Templates/NewableGuid.cs index 2adcdc7..72fb198 100644 --- a/src/StructId/Templates/NewableGuid.cs +++ b/src/StructId/Templates/NewableGuid.cs @@ -6,8 +6,13 @@ [TStructId] file partial record struct TSelf(Guid Value) { - /// - /// Creates a new instance of with a . - /// - public static TSelf New() => new(Guid.NewGuid()); + /// Creates a new instance with a newly generated . + public static TSelf New() + { +#if NET9_0_OR_GREATER + return new(Guid.CreateVersion7()); +#else + return new(Guid.NewGuid()); +#endif + } } \ No newline at end of file