Skip to content

Instantly share code, notes, and snippets.

@cherrydev
Created April 30, 2015 01:04

Revisions

  1. cherrydev created this gist Apr 30, 2015.
    34 changes: 34 additions & 0 deletions gistfile1.cs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,34 @@
    public interface ICurrentPrincipalAccessor {
    ClaimsPrincipal CurrentPrincipal { get; }
    }

    public class HttpContextCurrentPrincipalAccessor : ICurrentPrincipalAccessor {
    private IHttpContextAccessor _httpContextAccessor;

    public HttpContextCurrentPrincipalAccessor(IHttpContextAccessor httpContextAccessor) {
    _httpContextAccessor = httpContextAccessor;
    }

    public ClaimsPrincipal CurrentPrincipal { get { return _httpContextAccessor.HttpContext.User; } }
    }

    // In Startup.cs

    public IServiceProvider ConfigureServices(IServiceCollection services) {
    // everything else...
    services.AddSingleton<ICurrentPrincipalAccessor, HttpContextCurrentPrincipalAccessor>();
    }

    // In your service class

    public class MyTestableServiceClass {
    private ICurrentPrincipalAccessor _currentPrincipalAccessor;
    public MyTestableServiceClass(ICurrentPrincipalAccessor currentPrincipalAccessor) {
    _currentPrincipalAccessor = currentPrincipalAccessor;
    }

    public void MyServiceMethod() {
    var userId = _currentPrincipalAccessor.CurrentPrincipal.GetUserId();
    // ... etc
    }
    }