Persiltech.UserServices.Abstractions
0.1.0
See the version list below for details.
dotnet add package Persiltech.UserServices.Abstractions --version 0.1.0
NuGet\Install-Package Persiltech.UserServices.Abstractions -Version 0.1.0
<PackageReference Include="Persiltech.UserServices.Abstractions" Version="0.1.0" />
<PackageVersion Include="Persiltech.UserServices.Abstractions" Version="0.1.0" />
<PackageReference Include="Persiltech.UserServices.Abstractions" />
paket add Persiltech.UserServices.Abstractions --version 0.1.0
#r "nuget: Persiltech.UserServices.Abstractions, 0.1.0"
#:package Persiltech.UserServices.Abstractions@0.1.0
#addin nuget:?package=Persiltech.UserServices.Abstractions&version=0.1.0
#tool nuget:?package=Persiltech.UserServices.Abstractions&version=0.1.0
Persiltech.UserServices.Abstractions
Define 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
sin acoplarse a la infraestructura que resuelve esos datos.
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 de forma deliberada: un usuario anónimo, o un origen de
identidad que no publique ese dato, devuelve null.
Uso
Tu capa de aplicación o de dominio depende únicamente de la interfaz:
public sealed class CreateOrderHandler(IUserService userService)
{
public Task<Guid> HandleAsync(CreateOrderCommand command, CancellationToken cancellationToken)
{
if (!userService.IsAuthenticated)
{
throw new UnauthorizedAccessException();
}
var order = Order.Create(command.Items, createdBy: userService.UserName);
// ...
}
}
Implementar el adaptador
Este paquete no incluye ninguna implementación: cada solución provee la suya en su capa de infraestructura, según de dónde salga la identidad. Un adaptador típico para ASP.NET Core:
public sealed class HttpContextUserService(IHttpContextAccessor httpContextAccessor) : IUserService
{
private ClaimsPrincipal? CurrentUser => httpContextAccessor.HttpContext?.User;
public bool IsAuthenticated => CurrentUser?.Identity?.IsAuthenticated ?? false;
public string? UserName => CurrentUser?.Identity?.Name;
public string? FullName => CurrentUser?.FindFirst(ClaimTypes.GivenName)?.Value;
}
Y su registro, que también corresponde a la solución consumidora:
builder.Services.AddHttpContextAccessor();
builder.Services.AddScoped<IUserService, HttpContextUserService>();
Decisiones de diseño
- Paquete de puros contratos. No trae ninguna implementación concreta de
IUserService. - Sin dependencias. No referencia
Microsoft.AspNetCore.*ni ningún framework de hosting, así que puede referenciarse desde una capa de dominio o de aplicación sin arrastrar infraestructura. - Sin registro en el contenedor. No hay implementación que registrar, así que el paquete no
expone métodos de extensión de
IServiceCollection.
Compatibilidad
.NET 10 (net10.0).
Estado
Versión 0.x: la superficie pública puede cambiar entre versiones menores mientras se estabiliza.
Licencia
MIT.
| 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.