diff --git a/src/Microsoft.AspNetCore.Identity.EntityFrameworkCore/IdentityEntityFrameworkBuilderExtensions.cs b/src/Microsoft.AspNetCore.Identity.EntityFrameworkCore/IdentityEntityFrameworkBuilderExtensions.cs index a46fab5320..e2939c35c5 100644 --- a/src/Microsoft.AspNetCore.Identity.EntityFrameworkCore/IdentityEntityFrameworkBuilderExtensions.cs +++ b/src/Microsoft.AspNetCore.Identity.EntityFrameworkCore/IdentityEntityFrameworkBuilderExtensions.cs @@ -83,7 +83,7 @@ namespace Microsoft.Extensions.DependencyInjection } else { - userStoreType = typeof(UserOnlyStore<,,,,,>).MakeGenericType(userType, roleType, contextType, + userStoreType = typeof(UserOnlyStore<,,,,,>).MakeGenericType(userType, contextType, identityContext.GenericTypeArguments[1], identityContext.GenericTypeArguments[2], identityContext.GenericTypeArguments[3], diff --git a/test/Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test/UserOnlyTest.cs b/test/Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test/UserOnlyTest.cs new file mode 100644 index 0000000000..24599d89e5 --- /dev/null +++ b/test/Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test/UserOnlyTest.cs @@ -0,0 +1,66 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder.Internal; +using Microsoft.AspNetCore.Identity.Test; +using Microsoft.AspNetCore.Testing.xunit; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Xunit; + +namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test +{ + public class UserOnlyTest : IClassFixture + { + private readonly ApplicationBuilder _builder; + private const string DatabaseName = nameof(UserOnlyTest); + + public class TestUserDbContext : IdentityUserContext + { + public TestUserDbContext(DbContextOptions options) : base(options) { } + } + + public UserOnlyTest(ScratchDatabaseFixture fixture) + { + var services = new ServiceCollection(); + + services + .AddSingleton(new ConfigurationBuilder().Build()) + .AddDbContext(o => o.UseSqlServer(fixture.ConnectionString)) + .AddIdentityCore(o => { }) + .AddEntityFrameworkStores(); + + services.AddLogging(); + + var provider = services.BuildServiceProvider(); + _builder = new ApplicationBuilder(provider); + + using(var scoped = provider.GetRequiredService().CreateScope()) + using (var db = scoped.ServiceProvider.GetRequiredService()) + { + db.Database.EnsureCreated(); + } + } + + [ConditionalFact] + [FrameworkSkipCondition(RuntimeFrameworks.Mono)] + [OSSkipCondition(OperatingSystems.Linux)] + [OSSkipCondition(OperatingSystems.MacOSX)] + public async Task EnsureStartupUsageWorks() + { + var userStore = _builder.ApplicationServices.GetRequiredService>(); + var userManager = _builder.ApplicationServices.GetRequiredService>(); + + Assert.NotNull(userStore); + Assert.NotNull(userManager); + + const string userName = "admin"; + const string password = "1qaz@WSX"; + var user = new IdentityUser { UserName = userName }; + IdentityResultAssert.IsSuccess(await userManager.CreateAsync(user, password)); + IdentityResultAssert.IsSuccess(await userManager.DeleteAsync(user)); + } + } +} \ No newline at end of file