Make IHttpContextAccessor Optional
This commit is contained in:
parent
042588e1b2
commit
167bb54c8d
|
|
@ -41,7 +41,7 @@ namespace Microsoft.AspNet.Identity
|
|||
{
|
||||
throw new ArgumentNullException(nameof(userManager));
|
||||
}
|
||||
if (contextAccessor == null || contextAccessor.HttpContext == null)
|
||||
if (contextAccessor == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(contextAccessor));
|
||||
}
|
||||
|
|
@ -51,12 +51,15 @@ namespace Microsoft.AspNet.Identity
|
|||
}
|
||||
|
||||
UserManager = userManager;
|
||||
Context = contextAccessor.HttpContext;
|
||||
_contextAccessor = contextAccessor;
|
||||
ClaimsFactory = claimsFactory;
|
||||
Options = optionsAccessor?.Value ?? new IdentityOptions();
|
||||
Logger = logger;
|
||||
}
|
||||
|
||||
private readonly IHttpContextAccessor _contextAccessor;
|
||||
private HttpContext _context;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the <see cref="ILogger"/> used to log messages from the manager.
|
||||
/// </summary>
|
||||
|
|
@ -65,10 +68,26 @@ namespace Microsoft.AspNet.Identity
|
|||
/// </value>
|
||||
protected internal virtual ILogger Logger { get; set; }
|
||||
protected internal UserManager<TUser> UserManager { get; set; }
|
||||
internal HttpContext Context { get; set; }
|
||||
internal IUserClaimsPrincipalFactory<TUser> ClaimsFactory { get; set; }
|
||||
internal IdentityOptions Options { get; set; }
|
||||
|
||||
internal HttpContext Context {
|
||||
get
|
||||
{
|
||||
var context = _context ?? _contextAccessor?.HttpContext;
|
||||
if (context == null)
|
||||
{
|
||||
throw new InvalidOperationException("HttpContext must not be null.");
|
||||
}
|
||||
return context;
|
||||
}
|
||||
set
|
||||
{
|
||||
_context = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Creates a <see cref="ClaimsPrincipal"/> for the specified <paramref name="user"/>, as an asynchronous operation.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -54,8 +54,7 @@ namespace Microsoft.AspNet.Identity
|
|||
ILookupNormalizer keyNormalizer,
|
||||
IdentityErrorDescriber errors,
|
||||
IServiceProvider services,
|
||||
ILogger<UserManager<TUser>> logger,
|
||||
IHttpContextAccessor contextAccessor)
|
||||
ILogger<UserManager<TUser>> logger)
|
||||
{
|
||||
if (store == null)
|
||||
{
|
||||
|
|
@ -63,7 +62,6 @@ namespace Microsoft.AspNet.Identity
|
|||
}
|
||||
Store = store;
|
||||
Options = optionsAccessor?.Value ?? new IdentityOptions();
|
||||
_context = contextAccessor?.HttpContext;
|
||||
PasswordHasher = passwordHasher;
|
||||
KeyNormalizer = keyNormalizer;
|
||||
ErrorDescriber = errors;
|
||||
|
|
@ -86,6 +84,7 @@ namespace Microsoft.AspNet.Identity
|
|||
|
||||
if (services != null)
|
||||
{
|
||||
_context = services.GetService<IHttpContextAccessor>()?.HttpContext;
|
||||
foreach (var providerName in Options.Tokens.ProviderMap.Keys)
|
||||
{
|
||||
var provider = services.GetRequiredService(Options.Tokens.ProviderMap[providerName].ProviderType) as IUserTokenProvider<TUser>;
|
||||
|
|
|
|||
|
|
@ -255,7 +255,7 @@ namespace Microsoft.AspNet.Identity.Test
|
|||
|
||||
private class MyUserManager : UserManager<TestUser>
|
||||
{
|
||||
public MyUserManager(IUserStore<TestUser> store) : base(store, null, null, null, null, null, null, null, null, null) { }
|
||||
public MyUserManager(IUserStore<TestUser> store) : base(store, null, null, null, null, null, null, null, null) { }
|
||||
}
|
||||
|
||||
private class MyRoleManager : RoleManager<TestRole>
|
||||
|
|
|
|||
|
|
@ -73,7 +73,6 @@ namespace Microsoft.AspNet.Identity.Test
|
|||
var userManager = MockHelpers.MockUserManager<TestUser>().Object;
|
||||
Assert.Throws<ArgumentNullException>("contextAccessor", () => new SignInManager<TestUser>(userManager, null, null, null, null));
|
||||
var contextAccessor = new Mock<IHttpContextAccessor>();
|
||||
Assert.Throws<ArgumentNullException>("contextAccessor", () => new SignInManager<TestUser>(userManager, contextAccessor.Object, null, null, null));
|
||||
var context = new Mock<HttpContext>();
|
||||
contextAccessor.Setup(a => a.HttpContext).Returns(context.Object);
|
||||
Assert.Throws<ArgumentNullException>("claimsFactory", () => new SignInManager<TestUser>(userManager, contextAccessor.Object, null, null, null));
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ namespace Microsoft.AspNet.Identity.Test
|
|||
|
||||
public class CustomUserManager : UserManager<TestUser>
|
||||
{
|
||||
public CustomUserManager() : base(new Mock<IUserStore<TestUser>>().Object, null, null, null, null, null, null, null, null, null)
|
||||
public CustomUserManager() : base(new Mock<IUserStore<TestUser>>().Object, null, null, null, null, null, null, null, null)
|
||||
{ }
|
||||
}
|
||||
|
||||
|
|
@ -694,7 +694,7 @@ namespace Microsoft.AspNet.Identity.Test
|
|||
public async Task ManagerPublicNullChecks()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>("store",
|
||||
() => new UserManager<TestUser>(null, null, null, null, null, null, null, null, null, null));
|
||||
() => new UserManager<TestUser>(null, null, null, null, null, null, null, null, null));
|
||||
|
||||
var manager = MockHelpers.TestUserManager(new NotImplementedStore());
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ namespace Microsoft.AspNet.Identity.Test
|
|||
public static Mock<UserManager<TUser>> MockUserManager<TUser>() where TUser : class
|
||||
{
|
||||
var store = new Mock<IUserStore<TUser>>();
|
||||
var mgr = new Mock<UserManager<TUser>>(store.Object, null, null, null, null, null, null, null, null, null);
|
||||
var mgr = new Mock<UserManager<TUser>>(store.Object, null, null, null, null, null, null, null, null);
|
||||
mgr.Object.UserValidators.Add(new UserValidator<TUser>());
|
||||
mgr.Object.PasswordValidators.Add(new PasswordValidator<TUser>());
|
||||
return mgr;
|
||||
|
|
@ -76,8 +76,7 @@ namespace Microsoft.AspNet.Identity.Test
|
|||
var userManager = new UserManager<TUser>(store, options.Object, new PasswordHasher<TUser>(),
|
||||
userValidators, pwdValidators, new UpperInvariantLookupNormalizer(),
|
||||
new IdentityErrorDescriber(), null,
|
||||
new Mock<ILogger<UserManager<TUser>>>().Object,
|
||||
null);
|
||||
new Mock<ILogger<UserManager<TUser>>>().Object);
|
||||
validator.Setup(v => v.ValidateAsync(userManager, It.IsAny<TUser>()))
|
||||
.Returns(Task.FromResult(IdentityResult.Success)).Verifiable();
|
||||
return userManager;
|
||||
|
|
|
|||
Loading…
Reference in New Issue