Tolitech.Auditing.Generators
1.0.0
See the version list below for details.
dotnet add package Tolitech.Auditing.Generators --version 1.0.0
NuGet\Install-Package Tolitech.Auditing.Generators -Version 1.0.0
<PackageReference Include="Tolitech.Auditing.Generators" Version="1.0.0" />
<PackageVersion Include="Tolitech.Auditing.Generators" Version="1.0.0" />
<PackageReference Include="Tolitech.Auditing.Generators" />
paket add Tolitech.Auditing.Generators --version 1.0.0
#r "nuget: Tolitech.Auditing.Generators, 1.0.0"
#:package Tolitech.Auditing.Generators@1.0.0
#addin nuget:?package=Tolitech.Auditing.Generators&version=1.0.0
#tool nuget:?package=Tolitech.Auditing.Generators&version=1.0.0
Tolitech.Auditing.Generators
Source generator that creates audit fields, read-only audit properties, and private audit mutation methods for partial entities.
Use this package together with Tolitech.Auditing.Generators.Abstractions.
How It Works
- Your project defines audit interfaces with properties annotated by the abstraction attributes.
- An entity implements those interfaces.
- The generator emits the backing fields, read-only properties, and private
SetAuditmethods.
public sealed partial class Product :
ICreatedAudit<UserId>,
IUpdatedAudit<UserId>,
IDeletedAudit<UserId>
{
public static IResult<Product> Create(UserId userId)
{
var product = new Product();
product.SetCreatedAudit(userId);
return Result.Created(product);
}
}
SetCreatedAudit, SetUpdatedAudit, and SetDeletedAudit are generated as private methods. They can be called from inside the same partial entity, but they are not exposed as entity.SetCreatedAudit(...) to external code.
Generated Members
For a generic audit interface, the generator creates members similar to:
private DateTimeOffset? _createdAt;
public DateTimeOffset? CreatedAt => _createdAt;
private UserId? _createdById;
public UserId? CreatedById => _createdById;
private IResult SetCreatedAudit(UserId? createdById)
{
if (_createdAt.HasValue || _createdById.HasValue)
{
return Result.BadRequest();
}
_createdAt = DateTimeOffset.UtcNow;
_createdById = createdById;
return Result.OK();
}
Custom Behavior
If a specific entity needs different behavior, declare a method with the same signature in the entity. The generator will not generate the default method for that signature.
public sealed partial class Product : ICreatedAudit<UserId>
{
public IResult SetCreatedAudit(UserId? createdById)
{
// Custom rule.
return Result.OK();
}
}
Manual methods can be private, public, protected, or internal. Public methods are allowed only when the entity author explicitly chooses to expose them.
Diagnostics
TAUD001: The audited type must be partial.TAUD002: Parent types of nested audited types must be partial.TAUD003: A generated audit property conflicts with an existing member.TAUD004: A required audit property attribute is missing.TAUD005: More than one property uses the same audit attribute.TAUD006: An audit property has an invalid type or setter.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.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.