Persiltech.UserServices.Abstractions 0.1.15

dotnet add package Persiltech.UserServices.Abstractions --version 0.1.15
                    
NuGet\Install-Package Persiltech.UserServices.Abstractions -Version 0.1.15
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Persiltech.UserServices.Abstractions" Version="0.1.15" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Persiltech.UserServices.Abstractions" Version="0.1.15" />
                    
Directory.Packages.props
<PackageReference Include="Persiltech.UserServices.Abstractions" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Persiltech.UserServices.Abstractions --version 0.1.15
                    
#r "nuget: Persiltech.UserServices.Abstractions, 0.1.15"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Persiltech.UserServices.Abstractions@0.1.15
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Persiltech.UserServices.Abstractions&version=0.1.15
                    
Install as a Cake Addin
#tool nuget:?package=Persiltech.UserServices.Abstractions&version=0.1.15
                    
Install as a Cake Tool

Persiltech.UserServices.Abstractions

NuGet License: MIT

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 desde HttpContext.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.

Historial de versiones

El código fuente vive en el monorepo; esta tabla resume qué cambió en cada versión publicada.

Versión Cambios
0.1.15 Restaura en el README el historial de versiones, el soporte y el apoyo al desarrollo, que se perdieron al migrar el paquete al monorepo. El soporte pasa a las incidencias de GitHub. La insignia de licencia deja de apuntar al repositorio privado anterior, que devolvía 404, y enlaza a la página de licencia del portafolio.
0.1.14 Estrena las notas de versión del paquete. Anunciaba la restauración de este README, que por un commit incompleto no llegó a viajar en el paquete: llega en 0.1.15.
0.1.13 El .nuspec declara el repositorio, ahora público, y se activa SourceLink: el depurador del consumidor puede entrar al código fuente.
0.1.12 Publica la versión que la etiqueta v0.1.12 no llegó a subir.
0.1.11 Apartado de licencia retirado; ya lo publica nuget.org.
0.1.10 Historial de versiones al día en el README.
0.1.9 Insignia de licencia enlazada al texto real, no a la plantilla.
0.1.8 Licencia publicada como archivo dentro del paquete.
0.1.7 Metadata de empaquetado adaptada a un repositorio privado.
0.1.6 Enlace absoluto al texto de la licencia en el README.
0.1.5 Icono del paquete y documentación al día.
0.1.4 Documentación y metadata de empaquetado al día.
0.1.0 – 0.1.3 Primeras publicaciones de IUserService.

La superficie pública no ha cambiado desde 0.1.0: todo lo publicado hasta ahora son cambios de documentación y de metadata del paquete.

Soporte

Para dudas, informes de error o peticiones de mejora abre una incidencia. También puedes consultar la página del paquete.

Apoya el desarrollo

Si el paquete te ahorra trabajo, puedes apoyar su mantenimiento en GitHub Sponsors.

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • 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.15
     - Restaura en el README el historial de versiones, el soporte y el apoyo al desarrollo, que se perdieron 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.14
     - Estrena estas notas de versión, que el paquete no declaraba
     - Anunciaba la restauración del README, que por un commit incompleto no llegó a viajar en el paquete: llega en 0.1.15
     - 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