Skip to main content
Version: 0.3.x (0.3.0)

Packages

Thirty-two NuGet packages. Install AdCodicem.ValueObjects and add whichever of the others cover the boundaries your application actually has.

PackageWhat it gives you
AdCodicem.ValueObjectsThe one to install: contracts, source generator and analyzers.
AdCodicem.ValueObjects.AbstractionsThe contracts alone, with no dependency at all, and the DataAnnotations attributes [ParsesAs] and [NotDefault].
AdCodicem.ValueObjects.JsonCovers source-generated serializer contexts and hand-written value objects, and fills in the JSON Schema System.Text.Json exports.
AdCodicem.ValueObjects.EntityFrameworkCoreConverters, comparers, a convention that maps a whole assembly, keys generated the provider's way, .Value translated in queries, and opt-in CHECK constraints from the rules, whose violations carry the rule code under UseValueObjectCheckErrors().
AdCodicem.ValueObjects.AspNetCoreMVC model binding and RFC 9457 problem details carrying the violated rule.
AdCodicem.ValueObjects.AspNetCore.HttpThe same problem details for minimal APIs, native AOT included. See ASP.NET Core.
AdCodicem.ValueObjects.AspNetCore.NewtonsoftJsonThe same problem details for a body MVC reads with Newtonsoft.Json, and for a JSON Patch document applied through the rules. See ASP.NET Core.
AdCodicem.ValueObjects.OpenApiSchema transformer for the built-in .NET OpenAPI stack.
AdCodicem.ValueObjects.SwashbuckleSchema and parameter filters for Swashbuckle 10.3 and later. See OpenAPI.
AdCodicem.ValueObjects.NJsonSchemaNSwag documents and the JSON Schemas Confluent's serdes register with the Schema Registry, built with NJsonSchema: each value object one definition of its underlying type, with its rules. See OpenAPI and Kafka.
AdCodicem.ValueObjects.FluentValidationRules that reuse what the value object already enforces.
AdCodicem.ValueObjects.DapperType handlers for raw SQL.
AdCodicem.ValueObjects.MongoDBMongoDB.Driver serializers: the bare value in BSON, .Value in LINQ, strict reads, and a $jsonSchema validator built from the rules. See MongoDB.
AdCodicem.ValueObjects.MessagePackMessagePack formatters, and SignalR's MessagePack hub protocol: the bare value on the wire, strict reads. See MessagePack and SignalR.
AdCodicem.ValueObjects.ProtobufNetprotobuf-net serializers, and protobuf-net.Grpc code-first services: the underlying value on the wire, strict reads, the scalar in the .proto export, a refused request answered INVALID_ARGUMENT with its rule code. See protobuf-net and code-first gRPC.
AdCodicem.ValueObjects.GrpcContract-first gRPC services: every refused field answered at once as INVALID_ARGUMENT with a google.rpc.BadRequest, and a refusal that escapes a handler with a google.rpc.ErrorInfo carrying its rule code. See gRPC services.
AdCodicem.ValueObjects.HotChocolateOne GraphQL scalar per value object under HotChocolate 16, read through its rules, a refused value answered with its rule code. See GraphQL.
AdCodicem.ValueObjects.BlazorA Blazor input per value object, read through its rules, the refused rule's message under the field and its code on the EditContext. See Blazor forms.
AdCodicem.ValueObjects.NewtonsoftJsonInterop with code that has not moved to System.Text.Json.
AdCodicem.ValueObjects.SerilogLogs a value object as its underlying value, a number as a number. See Logging.
AdCodicem.ValueObjects.AIMicrosoft.Extensions.AI tool and structured-output schemas that carry the rules, and a refused tool argument answered with its rule code. See Language models.
AdCodicem.ValueObjects.ModelContextProtocolModel Context Protocol tool schemas that carry the rules, and a refused tool argument answered with its rule code, as a tool execution error. See Model Context Protocol servers.
AdCodicem.ValueObjects.AzureFunctionsAzure Functions isolated worker: route values, query values and binding data bound through the rules, a refusal carrying its code. See Azure.
AdCodicem.ValueObjects.AzureFunctions.AspNetCoreThe minimal API problem details for the HTTP triggers of the Functions ASP.NET Core integration. See Azure.
AdCodicem.ValueObjects.IdentifiersStripe-style public entity identifiers: acc_2K7X9…. See Entity Identifiers.
AdCodicem.ValueObjects.Identifiers.EntityFrameworkCoreFixed-width, non-Unicode columns for those identifiers.
AdCodicem.ValueObjects.Identifiers.MongoDBThose identifiers minted by MongoDB.Driver for a document inserted without one. See MongoDB.
AdCodicem.ValueObjects.TestingAn xUnit contract kit for your own value objects.
AdCodicem.ValueObjects.Testing.DataValues each value object accepts, drawn from its rules, for any test framework; the values at its edges and those its schema rules out. See Testing your value objects.
AdCodicem.ValueObjects.AutoFixtureAn AutoFixture customization that creates every value object from its rules. See Testing your value objects.
AdCodicem.ValueObjects.BogusA Bogus rule for every value-object member of a Faker<T>, replayed by UseSeed. See Testing your value objects.
AdCodicem.ValueObjects.FsCheckFsCheck arbitraries drawn from the rules, biased towards their edges, shrinking to accepted values. See Testing your value objects.

Supported frameworks​

Every package targets net10.0, so it installs into a project on .NET 10 or any later version. The thirty-two are released together under one version number: reference the same version of each. Their dependencies are minimums with no upper bound, and the exact minimum of each is in the package's dependency list on nuget.org. A framework's next major is supported by these same packages, never by a package per framework version (ADR-0010).

PackageTargetBuilt and tested againstOn the next .NET¹
AdCodicem.ValueObjectsnet10.0the .NET 10 SDKthe .NET 11 SDK, whose compiler runs the generator
AdCodicem.ValueObjects.Abstractionsnet10.0.NET 10.NET 11
AdCodicem.ValueObjects.Jsonnet10.0.NET 10, source generation included.NET 11, source generation included
AdCodicem.ValueObjects.EntityFrameworkCorenet10.0EF Core 10, on SQLite, PostgreSQL and SQL ServerEF Core 11, on SQLite, PostgreSQL and SQL Server
AdCodicem.ValueObjects.AspNetCorenet10.0ASP.NET Core 10ASP.NET Core 11
AdCodicem.ValueObjects.AspNetCore.Httpnet10.0ASP.NET Core 10, reflection-based binding, the Request Delegate Generator and native AOTASP.NET Core 11
AdCodicem.ValueObjects.AspNetCore.NewtonsoftJsonnet10.0ASP.NET Core 10, with Microsoft.AspNetCore.Mvc.NewtonsoftJson 10ASP.NET Core 11, with Microsoft.AspNetCore.Mvc.NewtonsoftJson 11
AdCodicem.ValueObjects.OpenApinet10.0ASP.NET Core 10, with Microsoft.OpenApi 2ASP.NET Core 11, with Microsoft.OpenApi 3
AdCodicem.ValueObjects.Swashbucklenet10.0Swashbuckle 10 on ASP.NET Core 10, with Microsoft.OpenApi 2Swashbuckle 10 on ASP.NET Core 11, with Microsoft.OpenApi 2
AdCodicem.ValueObjects.NJsonSchemanet10.0NJsonSchema 11.6: NSwag 14.7 on ASP.NET Core 10, Confluent's JSON serdes 2.16NSwag 14.7 and Confluent's JSON serdes 2.16 on .NET 11
AdCodicem.ValueObjects.FluentValidationnet10.0FluentValidation 12FluentValidation 12 on .NET 11
AdCodicem.ValueObjects.Dappernet10.0Dapper 2.1, on PostgreSQL and SQL ServerDapper 2.1, on SQLite, PostgreSQL and SQL Server
AdCodicem.ValueObjects.MongoDBnet10.0MongoDB.Driver 3.12, on MongoDB 7.0²MongoDB.Driver 3.12 on .NET 11, on MongoDB 7.0²
AdCodicem.ValueObjects.MessagePacknet10.0MessagePack 3.1, with SignalR's MessagePack hub protocol 10MessagePack 3.1 on .NET 11, with the hub protocol 11
AdCodicem.ValueObjects.ProtobufNetnet10.0protobuf-net 3.4 and protobuf-net.Grpc 1.3 over Grpc.AspNetCore 2.84, and protobuf-net's compile-time model under native AOTprotobuf-net 3.4 on .NET 11, a code-first call over TestHost
AdCodicem.ValueObjects.Grpcnet10.0Grpc.StatusProto 2.84, over Grpc.AspNetCore 2.84 and native AOTa contract-first service over TestHost on .NET 11
AdCodicem.ValueObjects.HotChocolatenet10.0HotChocolate 16.6, in process and over ASP.NET CoreHotChocolate 16.6 on .NET 11
AdCodicem.ValueObjects.Blazornet10.0Blazor 10 (Microsoft.AspNetCore.Components.Web 10), through bUnit, static rendering over TestHost and HtmlRenderer under native AOTComponents 11, through HtmlRenderer
AdCodicem.ValueObjects.NewtonsoftJsonnet10.0Newtonsoft.Json 13Newtonsoft.Json 13 on .NET 11
AdCodicem.ValueObjects.Serilognet10.0Serilog 4, through Microsoft.Extensions.Logging too, and native AOTSerilog 4 on .NET 11
AdCodicem.ValueObjects.AInet10.0Microsoft.Extensions.AI 10, with its OpenAI adapter in strict mode, and native AOTMicrosoft.Extensions.AI 10 on .NET 11
AdCodicem.ValueObjects.ModelContextProtocolnet10.0ModelContextProtocol 2.2, in process over streams, and native AOTModelContextProtocol 2.2 on .NET 11
AdCodicem.ValueObjects.AzureFunctionsnet10.0Microsoft.Azure.Functions.Worker 2.52, in the Functions host's dotnet-isolated 10.0 imageWorker 2.52 on .NET 11
AdCodicem.ValueObjects.AzureFunctions.AspNetCorenet10.0the Functions ASP.NET Core integration 2.1, in the Functions host's dotnet-isolated 10.0 imagethe integration 2.1 beside ASP.NET Core 11
AdCodicem.ValueObjects.Identifiersnet10.0.NET 10.NET 11
AdCodicem.ValueObjects.Identifiers.EntityFrameworkCorenet10.0EF Core 10, on PostgreSQL and SQL ServerEF Core 11, on SQLite, PostgreSQL and SQL Server
AdCodicem.ValueObjects.Identifiers.MongoDBnet10.0MongoDB.Driver 3.12, on MongoDB 7.0²MongoDB.Driver 3.12 on .NET 11, on MongoDB 7.0²
AdCodicem.ValueObjects.Testingnet10.0xUnit v3 4xUnit v3 4 on .NET 11
AdCodicem.ValueObjects.Testing.Datanet10.0.NET 10.NET 11
AdCodicem.ValueObjects.AutoFixturenet10.0AutoFixture 4.18AutoFixture 4.18 on .NET 11
AdCodicem.ValueObjects.Bogusnet10.0Bogus 35Bogus 35 on .NET 11
AdCodicem.ValueObjects.FsChecknet10.0FsCheck 3FsCheck 3 on .NET 11

¹ On the .NET 11 release candidate, by a CI job that installs the packages into net11.0 applications, the Swashbuckle package into one of its own: those of main after each push, a newer push cancelling an older one's run, and those of every preview and stable release before it is published (How the library is tested). A stable release ships only once it passes; a preview too, once .NET 11 ships.

² MongoDB 7.0 until a MongoDB 8 release starts on GitHub's runners: every MongoDB 8.x refuses a Linux kernel 6.19 or later (SERVER-121912), which the runners run since 2026-10-18. The packages ran against MongoDB 8 until then.

Versioning​

The packages follow semantic versioning from 1.0.0 on: from then, only a major version breaks the public API or removes a member. Before 1.0.0, the version is 0.<minor>.<patch>, and a minor version may break part of the public API, or deprecate or remove part of it, without waiting for a major: read the changelog before taking a new minor. A patch never breaks anything, before 1.0.0 or after. A member deprecated rather than removed outright is reported by the compiler wherever it is used, with a diagnostic naming its replacement. A member that is read by nothing any more stays a while as a compile error that says what replaces it (VO0021, VO0028, VO0034, VO0035), and any minor version may then remove it.

Trying a preview​

Between stable releases, a preview of every package is published to nuget.org when something a package ships has changed, checked every week. It carries the number of the release it leads to, 0.3.0-preview.172 for instance, and every package is published at that version:

dotnet add package AdCodicem.ValueObjects --prerelease

Previews receive no fixes of their own: a fix reaches the next preview and the next release. Every package, and every assembly inside it, carries a signed build provenance attestation; the security policy says how to check one. The preview of this documentation describes the latest preview, and its label names it.

Why this many packages​

Each integration is its own package so that adding EF Core support doesn't pull FluentValidation into a service that has no use for it, and so that a trimmed or AOT-published app only carries the generator's output for the boundaries it actually crosses. AdCodicem.ValueObjects is the only package with a source generator in it; everything else is a thin, generic-closed integration over the contracts in Abstractions.