TL.BaseContracts
0.3.0
See the version list below for details.
dotnet add package TL.BaseContracts --version 0.3.0
NuGet\Install-Package TL.BaseContracts -Version 0.3.0
<PackageReference Include="TL.BaseContracts" Version="0.3.0" />
<PackageVersion Include="TL.BaseContracts" Version="0.3.0" />
<PackageReference Include="TL.BaseContracts" />
paket add TL.BaseContracts --version 0.3.0
#r "nuget: TL.BaseContracts, 0.3.0"
#:package TL.BaseContracts@0.3.0
#addin nuget:?package=TL.BaseContracts&version=0.3.0
#tool nuget:?package=TL.BaseContracts&version=0.3.0
💎 TL.BaseContracts
Fundação padronizada e unificada de contratos em BCL pura (Commands, Queries, Events, Results, Errors e Paginações) para aplicações .NET modernas e legadas (.NET Standard 2.0, .NET 8 e .NET 9).
📦 Instalação
Adicione o pacote ao seu projeto via .NET CLI:
dotnet add package TL.BaseContracts
🚀 Como Usar
1. Paginação Padronizada (PagedResult<T> e PagedRequest)
Padronize as respostas de listagens e relatórios com cálculo automático de páginas e navegação:
using TL.BaseContracts;
[HttpGet("users")]
public async Task<IActionResult> GetUsers([FromQuery] PagedRequest request)
{
// PagedRequest normaliza automaticamente PageNumber e PageSize
var (users, totalCount) = await _userRepository.GetPagedAsync(request.PageNumber, request.PageSize);
// Cria o PagedResult imutável com cálculo automático de páginas
var pagedResult = PagedResult<UserDto>.Create(users, totalCount, request.PageNumber, request.PageSize);
return Ok(pagedResult);
// Retorna: { items: [...], pageNumber: 1, pageSize: 10, totalCount: 45, totalPages: 5, hasPreviousPage: false, hasNextPage: true }
}
2. Múltiplos Erros de Validação por Campo (ValidationError)
Integração limpa com FluentValidation, DataAnnotations e formato RFC 7807 (ProblemDetails):
using TL.BaseContracts;
public Result<UserDto> CreateUser(CreateUserCommand command)
{
var failures = new Dictionary<string, string[]>
{
{ "Email", new[] { "E-mail é obrigatório.", "Formato inválido." } },
{ "Password", new[] { "A senha deve conter no mínimo 8 caracteres." } }
};
if (failures.Count > 0)
{
return ValidationError.FromFailures(failures);
}
return new UserDto { Email = command.Email };
}
3. Result Pattern Moderno (Result<T> e Error)
Substitua exceções de fluxo por código funcional limpo, expressivo e seguro:
using TL.BaseContracts;
public class UserService
{
public Result<UserDto> RegisterUser(string email, string password)
{
if (string.IsNullOrWhiteSpace(email))
{
return ValidationError.ForField("Email", "O e-mail fornecido é inválido.");
}
var user = new UserDto { Id = Guid.NewGuid(), Email = email };
return user; // Conversão implícita de sucesso
}
}
4. Consumindo com Pattern Matching (Match)
var result = userService.RegisterUser("dev@empresa.com", "senha123");
string responseText = result.Match(
onSuccess: user => $"Usuário registrado com sucesso! ID: {user.Id}",
onFailure: error => $"Falha [{error.Code}] ({error.Type}): {error.Message}"
);
5. Contratos Agnósticos de Mensageria (TL.BaseContracts.Messaging)
Publique e consuma eventos sem acoplar sua camada de domínio ou aplicação a nenhum broker concreto (RabbitMQ, Kafka, Azure Service Bus):
using TL.BaseContracts.Messaging;
public class OrderService
{
private readonly IEventProducer _eventProducer;
public OrderService(IEventProducer eventProducer) => _eventProducer = eventProducer;
public async Task CreateOrderAsync(OrderDto order, CancellationToken ct)
{
var orderCreated = new OrderCreatedEvent(order.Id, order.Total);
// Publicação agnóstica com metadados opcionais
var metadata = new EventMetadata().WithCorrelationId(Guid.NewGuid().ToString());
await _eventProducer.PublishAsync(orderCreated, metadata, ct);
}
}
Implementação de Handlers desacoplados:
using TL.BaseContracts;
using TL.BaseContracts.Messaging;
public class OrderCreatedHandler : IEventHandler<OrderCreatedEvent>
{
public async Task<Result> HandleAsync(EventMessage<OrderCreatedEvent> message, CancellationToken ct)
{
Console.WriteLine($"Processando pedido: {message.Payload.OrderId}, EventId: {message.EventId}");
return Result.Success();
}
}
6. Rastreabilidade com IRequest
public class ProcessPaymentCommand : IRequest
{
public Guid IdRequest { get; } = Guid.NewGuid();
public decimal Amount { get; set; }
}
7. Interoperabilidade com Response<T> (Legado)
// Result<T> -> Response<T>
Response<UserDto> legacyResponse = result.ToResponse();
// Response<T> -> Result<T>
Result<UserDto> modernResult = legacyResponse.ToResult();
Compatibilidade & Princípios
- .NET Standard 2.0, .NET 8.0 (LTS) e .NET 9.0
- Zero Dependências Externas (100% BCL Pura).
- Invariantes Protegidas:
IsSuccessé estritamente falso quando existem mensagens de erro.
| 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 is compatible. 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 is compatible. 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.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages (3)
Showing the top 3 NuGet packages that depend on TL.BaseContracts:
| Package | Downloads |
|---|---|
|
TL.MiddlewareLibrary
Biblioteca modular de middlewares para ASP.NET Core (.NET 8 e .NET 9) com foco em diagnósticos de latência, controle de taxa por IP, cache em memória e padronização de respostas de erro RFC 7807 (ProblemDetails) integrada a TL.BaseContracts. |
|
|
TL.RabbitMQ
Adaptador resiliente de RabbitMQ implementando a abstração unificada IEventProducer e IEventHandler com suporte a Publisher Confirms, Dead-Letter Queue (.dlq) automática, retentativas e DI para .NET 8 e .NET 9. |
|
|
TL.Kafka
Adaptador resiliente de Apache Kafka implementando a abstração unificada IEventProducer e IEventHandler com suporte a controle de partição, headers CloudEvents, Dead-Letter Topic (.dlt) e DI para .NET 8 e .NET 9. |
GitHub repositories
This package is not used by any popular GitHub repositories.