FunctionalDdd.PrimitiveValueObjectGenerator
3.0.0-alpha.72
dotnet add package FunctionalDdd.PrimitiveValueObjectGenerator --version 3.0.0-alpha.72
NuGet\Install-Package FunctionalDdd.PrimitiveValueObjectGenerator -Version 3.0.0-alpha.72
<PackageReference Include="FunctionalDdd.PrimitiveValueObjectGenerator" Version="3.0.0-alpha.72" />
<PackageVersion Include="FunctionalDdd.PrimitiveValueObjectGenerator" Version="3.0.0-alpha.72" />
<PackageReference Include="FunctionalDdd.PrimitiveValueObjectGenerator" />
paket add FunctionalDdd.PrimitiveValueObjectGenerator --version 3.0.0-alpha.72
#r "nuget: FunctionalDdd.PrimitiveValueObjectGenerator, 3.0.0-alpha.72"
#:package FunctionalDdd.PrimitiveValueObjectGenerator@3.0.0-alpha.72
#addin nuget:?package=FunctionalDdd.PrimitiveValueObjectGenerator&version=3.0.0-alpha.72&prerelease
#tool nuget:?package=FunctionalDdd.PrimitiveValueObjectGenerator&version=3.0.0-alpha.72&prerelease
FunctionalDdd.PrimitiveValueObjectGenerator
Roslyn source generator for creating strongly-typed value objects with automatic validation and IParsable support.
What It Does
Automatically generates boilerplate code for classes inheriting from RequiredString or RequiredGuid:
// You write this:
public partial class OrderId : RequiredGuid
{
}
// Generator creates:
// - TryCreate(Guid?) method returning Result<OrderId>
// - TryCreate(string?) method returning Result<OrderId>
// - NewUnique() method for new GUIDs
// - Parse(string, IFormatProvider?) method (IParsable)
// - TryParse(string?, IFormatProvider?, out OrderId) method (IParsable)
// - Explicit cast operator from Guid
// - Validation error messages
Installation
This package is included automatically when you install FunctionalDdd.PrimitiveValueObjects:
dotnet add package FunctionalDdd.PrimitiveValueObjects
Note: Both packages are required - the main package provides base classes, this generator creates the implementations.
Generated API
For RequiredString Classes
public partial class ProductName : RequiredString
{
}
// Generated members:
ProductName.TryCreate(string?) // Result<ProductName>
ProductName.Parse(string, IFormatProvider?) // ProductName (throws)
ProductName.TryParse(string?, IFormatProvider?, out...) // bool
(ProductName)"ABC" // Explicit cast
For RequiredGuid Classes
public partial class UserId : RequiredGuid
{
}
// Generated members:
UserId.NewUnique() // New GUID
UserId.TryCreate(Guid?) // Result<UserId>
UserId.TryCreate(string?) // Result<UserId>
UserId.Parse(string, IFormatProvider?) // UserId (throws)
UserId.TryParse(string?, IFormatProvider?, out...) // bool
(UserId)Guid.NewGuid() // Explicit cast
Requirements
- .NET Standard 2.0 compatible (source generators must target netstandard2.0)
- C# 9.0+ for partial class support
- Requires
FunctionalDdd.PrimitiveValueObjectspackage
How It Works
- Analyzes your code for partial classes inheriting from
RequiredStringorRequiredGuid - Generates implementation code at compile-time
- Code appears in IntelliSense automatically
- No runtime reflection - all compile-time
Validation
Generated code includes automatic validation:
var result = ProductName.TryCreate("");
// Returns: Result.Failure("Product Name cannot be empty.")
var result = UserId.TryCreate(Guid.Empty);
// Returns: Result.Failure("User Id cannot be empty.")
Error messages use the class name (e.g., "Product Name" from "ProductName").
Source Code
This is a source generator - it runs at compile-time and generates C# code. The generated code is visible in:
- Visual Studio: Project → Dependencies → Analyzers → FunctionalDdd.PrimitiveValueObjectGenerator
- Output:
obj/Debug/net10.0/generated/
Resources
License
MIT © Xavier John
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.0.0-alpha.72 | 34 | 2/8/2026 |
| 3.0.0-alpha.60 | 37 | 2/4/2026 |
| 3.0.0-alpha.59 | 44 | 2/1/2026 |
| 3.0.0-alpha.56 | 41 | 1/31/2026 |
| 3.0.0-alpha.55 | 40 | 1/31/2026 |
| 3.0.0-alpha.44 | 44 | 1/13/2026 |