Visão geral
ITLab.Template.DevPack é o pacote NuGet opinionado de infraestrutura para projetos
.NET 10 da ITLab. Provê primitivos de DDD/CQRS, behaviors de pipeline Mediator
(martinothamar), interceptors EF Core, sistema de autorização policy-based, contratos de
identity e utilitários transversais.
O princípio raiz é no framework wrappers (ADR-001): o DevPack expõe contratos pequenos e composição via DI — consumidores usam Mediator, EF Core, Serilog e ASP.NET Core diretamente, nunca através de invólucros.
Pilares
| Pilar | Feature | Em uma linha |
|---|---|---|
| Result pattern | Core | Result<T> + Error railway-oriented; nunca exceptions para falha esperada |
| CQRS | Cqrs | ICommand<T> / IQuery<T> sobre Mediator source-generated; handlers retornam ValueTask |
| Pipeline | Behaviors | logging + validação FluentValidation via AddDevPackBehaviors() |
| Autorização | Authorization | permissões declarativas ([RequiresPermission], policies) com evaluator plugável |
| Domínio | Domain | Entity, AuditedEntity (+ AuditTimestamp UTC+timezone), soft-delete, DomainEvent |
| EF Core | Infrastructure.EfCore | interceptors de audit, soft-delete e dispatch de domain events |
| Identity | Identity | ICurrentUser, dual-scheme, signing key, token service |
| Testing | DevPack.Testing | WebApplicationFactoryBase<,> com auth fake e InMemory swap |
A lista completa está em Features (namespaces) — uma página por namespace público, com tabela de componentes, exemplos de uso, anti-padrões e pontos de extensão.
Documentação version-pinned
Use o dropdown de versões na navbar para ler a documentação da release que seu projeto consome. A documentação também ship dentro do próprio nupkg:
{NuGetPackageRoot}/itlab.template.devpack/{version}/devpack-docs/
Para histórico e guias de migração entre releases, ver o Changelog.
O índice LLM-readable (llms.txt) é servido na raiz deste site.
O que NÃO fazer (top 3)
- Não declarar
ICommand<Result<T>>— o wrapping deResult<>é automático pela assinatura do handler. - Não declarar
record : PaginatedQueryBase<T>— a base é classe abstrata; useclass. - Não chamar
services.AddMediator(...)semServiceLifetime.Scopedquando handlers consomemIAppDbContext.
Cada página de feature documenta seus próprios anti-padrões na seção "O que não fazer".