Persiltech.UserServices.Abstractions
0.1.14
See the version list below for details.
dotnet add package Persiltech.UserServices.Abstractions --version 0.1.14
NuGet\Install-Package Persiltech.UserServices.Abstractions -Version 0.1.14
<PackageReference Include="Persiltech.UserServices.Abstractions" Version="0.1.14" />
<PackageVersion Include="Persiltech.UserServices.Abstractions" Version="0.1.14" />
<PackageReference Include="Persiltech.UserServices.Abstractions" />
paket add Persiltech.UserServices.Abstractions --version 0.1.14
#r "nuget: Persiltech.UserServices.Abstractions, 0.1.14"
#:package Persiltech.UserServices.Abstractions@0.1.14
#addin nuget:?package=Persiltech.UserServices.Abstractions&version=0.1.14
#tool nuget:?package=Persiltech.UserServices.Abstractions&version=0.1.14
Persiltech.UserServices.Abstractions
Define la interfaz IUserService, un Output Port que expone el estado de autenticación y la identidad del usuario actual, para que cualquier solución basada en Arquitectura Limpia lo consuma.
Instalación
dotnet add package Persiltech.UserServices.Abstractions
El contrato
namespace Persiltech.UserServices.Abstractions;
public interface IUserService
{
bool IsAuthenticated { get; }
string? UserName { get; }
string? FullName { get; }
}
UserName y FullName son anulables porque el contrato no presupone de dónde sale la identidad: un usuario anónimo no tiene ninguno de los dos, y un usuario autenticado puede carecer de nombre completo si el proveedor de identidad no emitió ese dato. Consultarlos siempre después de IsAuthenticated no basta para descartar el null, y por eso la nulabilidad es parte de la firma.
Uso
La capa de aplicación depende del contrato, nunca de quien lo resuelve:
namespace Persiltech.Sales.Core.PlaceOrder;
public sealed class PlaceOrderHandler(IUserService userService, IOrderRepository orderRepository)
{
public async Task<Guid> HandleAsync(PlaceOrderCommand command, CancellationToken cancellationToken)
{
if (!userService.IsAuthenticated)
{
throw new UnauthorizedAccessException();
}
Order order = Order.Create(command.Items, userService.UserName);
await orderRepository.AddAsync(order, cancellationToken);
return order.Id;
}
}
Implementar el adaptador
El paquete no trae ninguna implementación: el adaptador y su registro en el contenedor corresponden a la solución consumidora, que es la que conoce su mecanismo de autenticación. En una aplicación ASP.NET Core suele resolverse desde HttpContext.User:
namespace Persiltech.Sales.Api.Security;
public sealed class HttpContextUserService(IHttpContextAccessor httpContextAccessor) : IUserService
{
private ClaimsPrincipal? CurrentUser => httpContextAccessor.HttpContext?.User;
public bool IsAuthenticated => CurrentUser?.Identity?.IsAuthenticated ?? false;
public string? UserName => CurrentUser?.FindFirstValue(ClaimTypes.Name);
public string? FullName => CurrentUser?.FindFirstValue("full_name");
}
Y su registro, en el proyecto que compone la aplicación:
builder.Services.AddHttpContextAccessor();
builder.Services.AddScoped<IUserService, HttpContextUserService>();
Decisiones de diseño
- Paquete de puros contratos: no incluye ninguna implementación concreta de
IUserService(Ej. una que la resuelva desdeHttpContext.User); cada solución consumidora provee su propio adaptador de infraestructura para el contrato. - Sin dependencias a
Microsoft.AspNetCore.*ni a ningún framework de hosting, para poder referenciarse desde una capa de dominio/aplicación sin arrastrar dependencias de infraestructura. - Sin registro en el contenedor de dependencias: no hay implementación que registrar.
Compatibilidad
net10.0
Estado
La versión es 0.x: la superficie pública puede cambiar entre versiones menores.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. 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. |
-
net10.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Persiltech.UserServices.Abstractions:
| Package | Downloads |
|---|---|
|
Persiltech.UserServices
Implementación para ASP.NET Core de IUserService, el Output Port que define Persiltech.UserServices.Abstractions, que resuelve la identidad y el estado de autenticación del usuario actual a partir de HttpContext.User. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.15 | 109 | 9/6/2026 |
| 0.1.14 | 99 | 9/6/2026 |
| 0.1.13 | 98 | 9/6/2026 |
| 0.1.12 | 122 | 8/20/2026 |
| 0.1.11 | 90 | 8/19/2026 |
| 0.1.10 | 105 | 8/19/2026 |
| 0.1.9 | 98 | 8/19/2026 |
| 0.1.8 | 128 | 8/18/2026 |
| 0.1.7 | 113 | 8/18/2026 |
| 0.1.6 | 110 | 8/18/2026 |
| 0.1.5 | 96 | 8/18/2026 |
| 0.1.4 | 136 | 8/11/2026 |
| 0.1.3 | 91 | 8/10/2026 |
| 0.1.2 | 92 | 8/10/2026 |
| 0.1.1 | 95 | 8/10/2026 |
| 0.1.0 | 122 | 8/10/2026 |
v0.1.14
- Restaura el historial de versiones, el soporte y el apoyo al desarrollo, que 0.1.13 perdió al migrar el paquete al monorepo
- El soporte pasa a las incidencias de GitHub, ahora que el repositorio es público
- Sin cambios en el código ni en la superficie pública
v0.1.13
- El .nuspec declara el repositorio, ahora público, y activa SourceLink: el depurador del consumidor puede entrar al código fuente
- Sin cambios en el código ni en la superficie pública